MicroBlaze プ ロ セ ッ サ リ フ ァ レンス ガイ ド エ ンべデ ッ ド 開発キ ッ ト EDK 11.4 UG081 (v10.3) Xilinx is providing this product documentation, hereinafter “Information,” to you “AS IS” with no warranty of any kind, express or implied. Xilinx makes no representation that the Information, or any particular implementation thereof, is free from any claims of infringement. You are responsible for obtaining any rights you may require for any implementation based on the Information. All specifications are subject to change without notice. XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE INFORMATION OR ANY IMPLEMENTATION BASED THEREON, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF INFRINGEMENT AND ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Except as stated herein, none of the Information may be copied, reproduced, distributed, republished, downloaded, displayed, posted, or transmitted in any form or by any means including, but not limited to, electronic, mechanical, photocopying, recording, or otherwise, without the prior written consent of Xilinx. © 2009 Xilinx, Inc. XILINX, the Xilinx logo, Virtex, Spartan, ISE, and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners. 本資料は英語版 (v.10.3) を翻訳 し た も ので、 内容に相違が生 じ る 場合には原文を優先 し ます。 資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。 日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 2002 年 10 月 1 日 1.0 EDK 3.1 リ リ ース 2003 年 3 月 11 日 2.0 EDK 3.2 リ リ ース 2003 年 9 月 24 日 3.0 EDK 6.1 リ リ ース 2004 年 2 月 20 日 3.1 EDK 6.2 リ リ ース 2004 年 8 月 24 日 4.0 EDK 6.3 リ リ ース 2004 年 9 月 21 日 4.1 EDK 6.3 サービ ス パ ッ ク 1 用に改訂 2004 年 11 月 18 日 4.2 EDK 6.3 サービ ス パ ッ ク 2 用に改訂 2005 年 1 月 20 日 5.0 EDK 7.1i リ リ ース 2005 年 4 月 2 日 5.1 EDK 7.1i サービ ス パ ッ ク 1 用に改訂 2005 年 5 月 9 日 5.2 EDK 7.1i サービ ス パ ッ ク 2 用に改訂 2005 年 10 月 5 日 5.3 EDK 8.1i 用に改訂 2006 年 2 月 21 日 5.4 EDK 8.1i サービ ス パ ッ ク 2 用に改訂 2006 年 6 月 1 日 6.0 EDK 8.2i リ リ ース 2006 年 7 月 24 日 6.1 EDK 8.2i サービ スパ ッ ク 1 用に改訂 2006 年 8 月 21 日 6.2 EDK 8.2i サービ スパ ッ ク 2 用に改訂 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド 改訂内容 japan.xilinx.com UG081 (v10.3) 日付 バージ ョ ン 2006 年 8 月 29 日 6.3 EDK 8.2i サービ スパ ッ ク 2 用に改訂 2006 年 9 月 15 日 7.0 EDK 9.1i リ リ ース 2007 年 2 月 22 日 7.1 EDK 9.1i サービ スパ ッ ク 1 用に改訂 2007 年 3 月 27 日 7.2 EDK 9.1i サービ スパ ッ ク 2 用に改訂 2007 年 6 月 25 日 8.0 EDK 9.2i リ リ ース 2008 年 1 月 17 日 9.0 EDK 10.1 リ リ ース 2008 年 3 月 4 日 9.1 EDK 10.1 サービ ス パ ッ ク 1 用に改訂 2008 年 5 月 14 日 9.2 EDK 10.1 サービ ス パ ッ ク 2 用に改訂 2008 年 7 月 14 日 9.3 EDK 10.1 サービ ス パ ッ ク 3 用に改訂 2009 年 2 月 4 日 10.0 EDK 11.1 リ リ ース 2009 年 4 月15 日 10.1 EDK 11.2 リ リ ース 2009 年 5 月 28 日 10.2 EDK 11.3 リ リ ース 2009 年 10 月 26 日 10.3 EDK 11.4 リ リ ース UG081 (v10.3) 改訂内容 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド japan.xilinx.com UG081 (v10.3) 目次 こ のマニ ュ アルについて マニ ュ アルの内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 表記規則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 書体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 オン ラ イ ン マニ ュ アル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 第 1 章 : MicroBlaze アーキテ ク チ ャ 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 デー タ型お よびエンデ ィ ア ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 イ ン ス ト ラ ク シ ョ ンの ま と め . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 セマ フ ォ の同期化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 汎用レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 特殊用途レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 パ イ プ ラ イ ン アーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3 段パ イ プ ラ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 5 段パ イ プ ラ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 分岐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 メ モ リ アーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 特権命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 仮想 メ モ リ 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 実モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 仮想モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 変換ル ッ ク アサ イ ド バ ッ フ ァ (TLB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 ア ク セ ス保護 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 UTLB 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 ページ ア ク セ スお よびページ変更の記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 リ セ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 ハー ド ウ ェ ア例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 ブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71 割 り 込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71 ユーザー ベ ク タ (例外) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 命令キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 命令キ ャ ッ シ ュ の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73 命令キ ャ ッ シ ュ の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74 命令キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74 デー タ キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 デー タ キ ャ ッ シ ュ の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 デー タ キ ャ ッ シ ュ の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76 デー タ キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 浮動小数点ユニ ッ ト (FPU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 フ ォーマ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 繰 り 上げ/繰 り 下げ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 5 例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80 ソ フ ト ウ ェ ア サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 ラ イ ブ ラ リ お よ びバ イ ナ リ の互換性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80 オペレー タ レ イ テ ン シ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80 C 言語のプ ロ グ ラ ミ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81 高速シ ンプ レ ッ ク ス リ ン ク (FSL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 ハー ド ウ ェ ア ア ク セ ラ レー タへの FSL の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83 デバ ッ グお よび ト レース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 デバ ッ グの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84 ト レース の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85 MicroBlaze I/O の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 プ ロ セ ッ サ ロ ーカル バス (PLB) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 オンチ ッ プ ペ リ フ ェ ラ ル バス (OPB) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ローカル メ モ リ バス (LMB) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 LMB 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 LMB ト ラ ンザ ク シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 デー タ の読み出 し お よ び書 き込み操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 マ ス タ FSL 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96 ス レーブ FSL 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 FSL ト ラ ンザ ク シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 直接 FSL 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 ザ イ リ ン ク ス CacheLink (XCL) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 CacheLink 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 CacheLink ト ラ ンザ ク シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101 デバ ッ グ イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 ト レース イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI) デー タ型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 レ ジ ス タ の使用規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 ス タ ッ ク の規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 呼び出 し 規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 メ モ リ モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 ス モール デー タ領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 デー タ 領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 共有の未初期化領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 リ テ ラ ルま たは定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 割 り 込みお よび例外処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 表記法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 フ ォーマ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 6 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) このマニ ュ アルについて こ のマニ ュ アルでは、 エンべデ ッ ド 開発キ ッ ト に含まれ る 32 ビ ッ ト MicroBlaze™ のハー ド ウ ェ ア アーキ テ ク チ ャ について説明 し ます。 ソフ ト プ ロ セ ッ サの マニ ュ アルの内容 こ のマニ ュ アルは、 次の章か ら 構成 さ れてい ます。 • 第 1 章 「MicroBlaze アーキテ ク チ ャ 」 では、MicroBlaze の機能の概要に加え、ビ ッ グ エンデ ィ ア ン形式、 32 ビ ッ ト の汎用レ ジ ス タ 、 キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト お よ び高速シ ンプ レ ッ ク ス リ ン ク イ ン タ ーフ ェ イ ス の情報を説明 し ます。 • 第 2 章 「MicroBlaze の信号 イ ン タ ーフ ェ イ ス」 では、 MicroBlaze への接続に使用で き る信号 イ ン タ ーフ ェ イ ス の タ イ プを説明 し ます。 • 第 3 章 「MicroBlaze アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI)」 では、 アセンブ リ 言 語で ソ フ ト プ ロ セ ッ サ用の ソ フ ト ウ ェ ア を開発す る 際に重要なアプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス について説明 し ます。 • 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 には、 MicroBlaze の命令セ ッ ト アーキ テ ク チ ャ の表記法、 フ ォーマ ッ ト 、 命令が記述 さ れてい ます。 その他の情報については、 http://japan.xilinx.com/support/mysupport.htm を参照 し て く だ さ い。 次 の表に、 リ ソ ース の一覧を示 し ます。 こ の リ ソ ース には、表示 さ れてい る URL か ら 直接ア ク セ ス で き ます。 リ ソ ース チ ュ ー ト リ アル 説明/URL デザ イ ン入力か ら 検証やデバ ッ グ ま でのザ イ リ ン ク ス のデザ イ ン ロ ーに ついて説明 し たチ ュ ー ト リ アルです。 フ http://japan.xilinx.com/support/techsup/tutorials/index.htm ア ンサー ブ ラ ウ ザ ザ イ リ ン ク ス の ソ リ ュ ーシ ョ ン レ コー ド のデー タベース です。 http://japan.xilinx.com/xlnx/xil_ans_browser.jsp アプ リ ケーシ ョ ン ノー ト デー タ シー ト デバ イ ス別デザ イ ン技術お よ びアプ ロ ーチの説明です。 http://japan.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category =Application+Notes リ ー ド バ ッ ク 、バ ウ ン ダ リ ス キ ャ ン、 コ ン フ ィ ギ ュ レーシ ョ ン、 レ ン グ ス カ ウ ン ト 、 デバ ッ グ な ど、 ザ イ リ ン ク ス デバ イ ス の特性に関す る 情 報がデバ イ ス別に記載 さ れてい ます。 http://japan.xilinx.com/xlnx/xweb/xil_publications_index.jsp プ ロ ブ レ ム ソ ルバー デザ イ ンの問題を ト ラ ブルシ ュー ト で き る対話型ツールです。 http://japan.xilinx.com/support/troubleshoot/psolvers.htm MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 7 こ のマニ ュ アルについて リ ソ ース テ ク ニ カル ヒ ン ト 説明/URL ザ イ リ ン ク ス デザ イ ン環境についての最新ニ ュ ース、 デザ イ ンの ヒ ン ト 、 パ ッ チ情報です。 http://japan.xilinx.com/xlnx/xil_tt_home.jsp GNU マニ ュ アル すべての GNU マニ ュ アルを入手で き ます。 http://www.gnu.org/manual 表記規則 こ のマニ ュ アルでは、 次の表記規則を使用 し てい ます。 各規則について、 例を挙げて説明 し ます。 書体 次の規則は、 すべてのマニ ュ アルで使用 さ れてい ます。 表記規則 使用箇所 例 Courier フ ォ ン ト シ ス テ ム が表示す る メ ッ セージ、 プ ロ ンプ ト 、プ ロ グ ラ ム フ ァ イ ル speed grade: - 100 を表示 し ます。 Courier フ ォ ン ト (太字) 構文内で入力す る コ マ ン ド を示 し ます。 ngdbuild design_name イタ リ ッ ク フォン ト ユーザーが値を入力す る必要のあ る構文内の変数に使用 し ます。 ngdbuild design_name 二重/一重かぎか っ こ 『 』、 「」 『 』 はマニ ュ アル名を、 「 」 はセ ク シ ョ ン名を示 し ます。 詳細は、 『開発シ ス テ ム リ フ ァ レ ン ス ガ イ ド 』 の 「PAR」 を参照 し て く だ さ い。 角か っ こ [ ] オプシ ョ ンの入力ま たはパ ラ メ ー タ を示 し ますが、 bus[7:0] の よ う な バ ス 仕様 で は必ず使用 し ま す。ま た 、 GUI 表記にも 使用し ま す。 [File] → [Open] を ク リ ッ ク し ます。 中か っ こ { } 1 つ以上の項目を選択す る ための lowpwr ={on|off} 縦棒 | 選択す る リ ス ト の項目を分離 し ま す。 リ ス ト を示 し ます。 縦の省略記号 . . . 横の省略記号 . . . 8 ngdbuild [option_name] design_name 繰 り 返 し 項目が省略 さ れてい る こ と を示 し ます。 繰 り 返 し 項目が省略 さ れてい る こ と を示 し ます。 japan.xilinx.com lowpwr ={on|off} IOB #1: Name = QOUT’ IOB #2: Name = CLKIN’ . . . allow block block_name loc1 loc2 ... locn; MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 表記規則 オ ン ラ イ ン マニ ュ アル こ のマニ ュ アルでは、 次の規則が使用 さ れてい ます。 表記規則 青色の文字 青色の下線付 き 文字 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 使用箇所 マ ニ ュ ア ル内の相互参照 を 示 し ます。 Web サ イ ト (URL) への ハ イ パー リ ン ク です。 japan.xilinx.com 例 詳細は、 「その他の リ ソ ース」 を参 照 し て く だ さ い。 詳細については、第 1 章の 「 タ イ ト ル フ ォーマ ッ ト 」 を参照 し て く だ さ い。 最新の ス ピー ド フ ァ イ ルは、 http://japan.xilinx.com か ら 入手で き ます。 9 こ のマニ ュ アルについて 10 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 第1章 MicroBlaze アーキテ ク チ ャ こ の章では MicroBlaze™ の機能の概要 と 、 ビ ッ グ エンデ ィ ア ン形式、 32 ビ ッ ト 汎用レ ジ ス タ、 仮 想 メ モ リ 管理、キ ャ ッ シ ュ ソ フ ト ウ ェ ア サポー ト 、高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス を含む、 MicroBlaze アーキテ ク チ ャ の詳細な情報を説明 し ます。 こ の章は、 次のセ ク シ ョ ンか ら 構成 さ れてい ます。 • 概要 • デー タ 型お よ びエンデ ィ ア ン • 命令 • レジス タ • パ イ プ ラ イ ン アーキテ ク チ ャ • メ モ リ アーキテ ク チ ャ • 特権命令 • 仮想 メ モ リ 管理 • リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク • 命令キ ャ ッ シ ュ • デー タ キ ャ ッ シ ュ • 浮動小数点ユニ ッ ト (FPU) • ソ フ ト ウ ェ ア サポー ト • 高速シ ンプ レ ッ ク ス リ ン ク (FSL) • デバ ッ グお よ び ト レース MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 11 第 1 章 : MicroBlaze アーキテ ク チ ャ 概要 MicroBlaze エンべデ ッ ド プ ロ セ ッ サ ソ フ ト コ アは、 ザ イ リ ン ク ス FPGA での イ ンプ リ メ ン テー シ ョ ン向けに最適化 さ れた RISC (Reduced Instruction Set Computer) です。 図 1-1 に、 MicroBlaze コ アの フ ァ ン ク シ ョ ン ブ ロ ッ ク 図を示 し ます。 命令側 バス イ ン タ ー フ ェ イ ス デー タ 側 バス イ ン タ ー フ ェ イ ス MMU (Memory Management Unit) UTLB ITLB IXCL_S ALU プログラム カウン タ シフ ト 特殊用途 レジス タ バレル シ フ ト デー タ キ ャ ッ シ ュ 命令キ ャ ッ シ ュ IXCL_M DTLB 乗算器 IPLB DXCL_M DXCL_S DPLB 除算器 IOPB FPU バス バス 命令 バッ フ ァ IF ILMB DOPB IF DLMB 命令 デコー ド MFSL 0..15 ま たは レ ジ ス タ フ ァ イル 32 X 32b DWSFL 0..15 SFSL 0..15 または オプ シ ョ ンの機能 DRSFL 0..15 図 1-1 : MicroBlaze コ アのブ ロ ッ ク 図 機能 MicroBlaze は、 柔軟に コ ン フ ィ ギ ュ レーシ ョ ン可能な ソ フ ト コ ア プ ロ セ ッ サで、 デザ イ ンの要件 に応 じ て機能を選択で き ます。 MicroBlaze プ ロ セ ッ サの機能は、 次の と お り です。 • 32 個の 32 ビ ッ ト 汎用レ ジ ス タ • 3 個のオペ ラ ン ド お よ び 2 個のア ド レ ス指定モー ド のあ る 32 ビ ッ ト 命令ワ ー ド • 32 ビ ッ ト ア ド レ ス バ ス • 単一パ イ プ ラ イ ン こ れ ら の機能に加え、選択可能なオプシ ョ ンの機能があ り ます。以前のバージ ョ ンの MicroBlaze で は、 こ こ に示す機能の一部のみがサポー ト さ れます。 オプシ ョ ンの機能がすべてサポー ト さ れてい る のは、 最新バージ ョ ンの MicroBlaze (v7.20) のみです。 新規デザ イ ンには、 最新バージ ョ ンの MicroBlaze プ ロ セ ッ サを使用す る こ と をお勧め し ます。 13 ページの表 1-1 に、Microblaze の各バージ ョ ンで コ ン フ ィ ギ ュ レ シ ョ ン可能な機能の概要を示 し ます。 12 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 概要 表 1-1 : MicroBlaze のオプ シ ョ ン機能 MicroBlaze のバージ ョ ン 機能 v4.00 v5.00 v6.00 v7.00 v7.10 v7.20 廃止予定 廃止予定 廃止予定 廃止予定 推奨 推奨 3 5 3/5 3/5 3/5 3/5 オンチ ッ プ ペ リ フ ェ ラ ル バス (OPB) デー タ側 イ ン ターフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オンチ ッ プ ペ リ フ ェ ラ ル バス (OPB) 命令側 イ ン ターフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ローカル メ モ リ バス (LMB) デー タ 側 イ ン ターフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ローカル メ モ リ バス (LMB) 命令側 イ ン ターフ ェ イ ス オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア バレ ル シ フ タ オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア除算器 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 0~7 0~7 0~7 0 ~ 15 0 ~ 15 0 ~ 15 マシ ン ス テー タ ス設定お よ び ク リ ア命令 オプシ ョ ン あり オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン IOPB イ ン タ ーフ ェ イ ス の命令キ ャ ッ シ ュ オプシ ョ ン なし なし なし なし なし IOPB イ ン タ ーフ ェ イ ス のデー タ オプシ ョ ン なし なし なし なし なし CacheLink (IXCL) の命令キ ャ ッ シ ュ オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン CacheLink (DXCL) のデー タ キ ャ ッ シ ュ オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 4 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア例外サポー ト オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン パ ターン比較命令 オプシ ョ ン あり オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン 浮動小数点ユニ ッ ト (FPU) オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア乗算器をデ ィ ス エーブルに する1 オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア デバ ッ グで読み出 し 可能な ESR お よ び EAR あり あり あり あり あり あり プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (PVR) - オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン エ リ ア ま たはス ピー ド の最適化 - - オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン ハー ド ウ ェ ア乗算器の 64 ビ ッ ト の結果 - - オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン バージ ョ ンの ス テー タ ス プ ロ セ ッ サ パ イ プ ラ イ ンの段数 高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン ターフ ェ イ ス キャ ッシュ XCL の 4 ま たは 8 ワ ー ド のキ ャ ッ シ ュ ライン MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 13 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-1 : MicroBlaze のオプ シ ョ ン機能 (続き ) MicroBlaze のバージ ョ ン 機能 v4.00 v5.00 v6.00 v7.00 v7.10 v7.20 LUT キ ャ ッ シ ュ メ モ リ - - オプシ ョ ン オプシ ョ ン オプシ ョ ン オプシ ョ ン プ ロ セ ッ サ ロ ーカル バス (PLB) デー タ 側 イ ン ターフ ェ イ ス - - - オプシ ョ ン オプシ ョ ン オプシ ョ ン プ ロ セ ッ サ ロ ーカル バス (PLB) 命令側 イ ン ターフ ェ イ ス - - - オプシ ョ ン オプシ ョ ン オプシ ョ ン 浮動小数点変換お よび平方根命令 - - - オプシ ョ ン オプシ ョ ン オプシ ョ ン MMU (Memory Management Unit) - - - オプシ ョ ン オプシ ョ ン オプシ ョ ン 拡張高速シ ンプ レ ッ ク ス リ ン ク (FSL) 命令 - - - オプシ ョ ン オプシ ョ ン オプシ ョ ン すべての命令キ ャ ッ シ ュ メ モ リ ア ク セ ス へのザ イ リ ン ク ス Cache Link の使用 - - - - オプシ ョ ン オプシ ョ ン すべてのデー タ キ ャ ッ シ ュ メ モ リ ア ク セ スへのザ イ リ ン ク ス Cache Link の使用 - - - - オプシ ョ ン オプシ ョ ン デー タ キ ャ ッ シ ュ の ラ イ ト バ ッ ク キ ャ ッ シ ュ ポ リ シーの使用 - - - - - オプシ ョ ン 命令キ ャ ッ シ ュ の Cache Link (IXCL) プロ ト コル - - - - - オプシ ョ ン デー タ キ ャ ッ シ ュ の Cache Link (DXCL) プロ ト コル - - - - - オプシ ョ ン 1. Virtex®-4 以降の フ ァ ミ リ で、 MUL18 お よ び DSP48 プ リ ミ テ ィ ブを節約す る ために使用。 デー タ 型およびエ ンデ ィ ア ン MicroBlaze では、 デー タ の記述に ビ ッ グ エンデ ィ ア ン形式を使用 し ます。 MicroBlaze に対 し ハー ド ウ ェ アでサポー ト さ れ るデー タ 型は、 ワ ー ド 、 ハーフ ワ ー ド 、 お よ びバ イ ト です。 各デー タ 型に 対す る ビ ッ ト お よ びバ イ ト 構成を次の表に示 し ます。 表 1-2 : ワー ド デー タ 型 14 バイ ト ア ド レ ス n n+1 n+2 n+3 バ イ ト 表記 0 1 2 3 バイ ト 順 MSByte LSByte ビ ッ ト 表現 0 31 ビッ ト順 MSBit LSBit japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令 表 1-3 : ハー フ ワー ド デー タ 型 バイ ト ア ド レ ス n n+1 バ イ ト 表記 0 1 バイ ト 順 MSByte LSByte ビ ッ ト 表現 0 15 ビッ ト順 MSBit LSBit 表 1-4 : バイ ト デー タ 型 バイ ト ア ド レ ス n ビ ッ ト 表現 0 7 ビッ ト順 MSBit LSBit 命令 イ ン ス ト ラ ク シ ョ ンのま と め MicroBlaze の命令は、 すべて 32 ビ ッ ト で、 タ イ プ A と タ イ プ B のいずれか と し て定義 さ れます。 タ イ プ A の命令には、最大 2 個の ソ ース レ ジ ス タ オペ ラ ン ド と 1 個のデス テ ィ ネーシ ョ ン レ ジ ス タ オペ ラ ン ド を含め る こ と がで き ます。 タ イ プ B の命令には、1 個の ソ ース レ ジ ス タ オペ ラ ン ド と 16 ビ ッ ト の即値オペ ラ ン ド が含ま れます。 こ の 16 ビ ッ ト の即値オペ ラ ン ド は、 タ イ プ B 命令の前 に imm 命令を付け る と 、 32 ビ ッ ト ま で拡張可能です。 タ イ プ B の命令には、 1 個のデス テ ィ ネー シ ョ ン レ ジ ス タ オペ ラ ン ド が含まれます。 命令の フ ァ ン ク シ ョ ンは、 演算、 論理、 分岐、 読み込み /格納、 特殊に分類 さ れます。 表 1-6 に MicroBlaze の命令セ ッ ト を示 し ます。 こ れ ら の命令の詳細 は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 表 1-5 に、 各命令の セマ ン テ ィ ク ス で使用 さ れ る命令セ ッ ト の用語を説明 し ます。 表 1-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] MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 15 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-5 : 命令セ ッ ト の用語 (続き ) シ ンボル 説明 PC 実行段プ ロ グ ラ ム カ ウ ン タ = SPR[0] x[y] レジ ス タ x のビ ッ ト y x[y:z] レジ ス タ x のビ ッ ト y ~ z x レ ジ ス タ x の ビ ッ ト 反転値 Imm 16 ビ ッ ト の即値 Immx x ビ ッ ト の即値 FSLx 4 ビ ッ ト の高速シ ンプ レ ッ ク ス リ ン ク (FSL) ポー ト 識別子 (x はポー ト 番号) C キ ャ リ ー フ ラ グ、 MSR[29] Sa 特殊用途レ ジ ス タ 、 ソ ース オペ ラ ン ド Sd 特殊用途レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド s(x) 符号拡張引数 x (最大 32 ビ ッ ト ) *Addr ロ ケーシ ョ ン Addr にあ る メ モ リ 内容 (デー タ サ イ ズ揃え ) := 代入演算子 = 等号 != 非等価 > 大な り >= 以上 < 小な り <= 以下 + 加算 * 乗算 / 除算 >> x 右に x ビ ッ ト シ フ ト << x 左に x ビ ッ ト シ フ ト and 論理積 (AND) or 論理和 (OR) xor 排他的論理和 (XOR) op1 if cond else op2 条件文 cond が真の場合は op1 を実行、 それ以外は op2 を実行 & 連結。 た と えば、 「0000100 & Imm7」 は固定フ ィ ール ド 0000100 と 7 ビ ッ ト の即値を連結 し た も のです。 signed 符号付 き 整数デー タ 型に対 し て実行 さ れ る 演算。 すべての四則演算は、 指定がない限 り 符号付 き の ワー ド オペ ラ ン ド で実行 さ れます。 16 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令 表 1-5 : 命令セ ッ ト の用語 (続き ) シ ンボル 説明 unsigned 符号な し 整数デー タ 型に対 し て実行 さ れ る演算 float 浮動小数点デー タ 型に対 し て実行 さ れ る演算 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 17 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 21 ~ 31 セマ ン テ ィ ク ス 16 ~ 31 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 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 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 ADDI Rd,Ra,Imm 001000 Rd RSUBI Rd,Ra,Imm 001001 ADDIC Rd,Ra,Imm 00000000011 Rd := Rb + Ra + 1 (unsigned) Rd[0] := 0 if (Rb >= Ra, unsigned) else Rd[0] := 1 Ra Imm Rd := s(Imm) + Ra Rd Ra Imm Rd := s(Imm) + Ra + 1 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 00000000000 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) 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 MULI Rd,Ra,Imm 011000 Rd Ra Imm Rd := Ra * s(Imm) BSRLI Rd,Ra,Imm 011001 Rd Ra 00000000000 & Imm5 18 Rb japan.xilinx.com Rd : = 0 & (Ra >> Imm5) MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 21 ~ 31 セマ ン テ ィ ク ス 16 ~ 31 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 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] (デー タ 読み出 し ) 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 (デー タ 書 き 込み) MSR[C] := FSL_M_Full if N = 1 TNECAGETD Rd,Rb 010011 Rd 00000 Rb 0N1TAE 00000 Rd := FSL Rb[28:31] (制御読み出 し ) 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 (制御書 き込み) 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 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 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 19 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 21 ~ 31 セマ ン テ ィ ク ス 16 ~ 31 010110 Rd Ra TNEAGET Rd,FSLx 011011 Rd 00000 0N0TAE000000 & FSLx Rd := FSLx (デー タ 読み出 し 、 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 (デー タ 書 き込み、 N = 0 の場合 ブ ロ ッ キ ン グ) MSR[C] := FSLx_M_Full if N = 1 TNECAGET Rd,FSLx 011011 Rd 00000 0N1TAE000000 & FSLx Rd := FSLx (制御読み出 し 、 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 (制御書 き込み、 N = 0 の場合ブ ロ ッ キ ン グ) MSR[C] := FSLx_M_Full if N = 1 OR Rd,Ra,Rb 100000 Rd Ra Rb 00000000000 Rd := Ra or Rb 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 ANDN Rd,Ra,Rb 100011 Rd Ra Rb 00000000000 Rd := Ra and 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 PCMPEQ Rd,Ra,Rb 100010 Rd Ra Rb 10000000000 Rd := 1 if (Rd = Ra) else Rd := 0 PCMPNE Rd,Ra,Rb 100011 Rd Ra Rb 10000000000 Rd := 1 if (Rd != 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]) SEXT16 Rd,Ra 100100 Rd Ra 0000000001100001 Rd := s(Ra[16:31]) 20 0 01110000000 Rd := sqrt (Ra)1 FSQRT Rd,Ra japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 WIC Ra,Rb 21 ~ 31 セマ ン テ ィ ク ス 100100 00000 Ra 16 ~ 31 Rb 01101000 ICache_Line[Ra >> 4].Tag := 0 if (C_ICACHE_LINE_LEN = 4) ICache_Line[Ra >> 5].Tag := 0 if (C_ICACHE_LINE_LEN = 8) WDC Ra,Rb 100100 00000 Ra Rb 01100100 キ ャ ッ シ ュ ラ イ ンが ク リ ア さ れ、 格納デー タ が廃棄 さ れます。 DCache_Line[Ra >> 4].Tag := 0 if (C_DCACHE_LINE_LEN = 4) DCache_Line[Ra >> 5].Tag := 0 if (C_DCACHE_LINE_LEN = 8) WDC.FLUSH Ra,Rb 100100 00000 Ra Rb 01100100 キ ャ ッ シ ュ ラ イ ンが フ ラ ッ シ ュ さ れ、 格納 デー タ が メ モ リ に書 き込まれてか ら ク リ ア さ れます。 D_DCACHE_USE_WRITEBACK = 1 の と き に使用。 WDC.CLEAR Ra,Rb 100100 00000 Ra Rb 01100100 ア ド レ ス が一致す る キ ャ ッ シ ュ ラ イ ンが ク リ ア さ れ、 格納デー タ が破棄 さ れます。 D_DCACHE_USE_WRITEBACK = 1 の と き に使用。 MTS Sd,Ra 100101 00000 Ra 11 & Sd SPR[Sd] := Ra • SPR[0x0001] は MSR • SPR[0x0007] は FSR • SPR[0x1000] は PID • SPR[0x1001] は ZPR • SPR[0x1002] は TLBX • SPR[0x1003] は TLBLO • SPR[0x1004] は TLBHI • SPR[0x1005] は TLBSX MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 21 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 MFS Rd,Sa 21 ~ 31 セマ ン テ ィ ク ス 100101 Rd 16 ~ 31 00000 10 & Sa 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[0x1000] は PID • SPR[0x1001] は ZPR • SPR[0x1002] は TLBX • SPR[0x1003] は TLBLO • SPR[0x1004] は TLBHI • SPR[0x2000] ~ SPR [0x200B] は PVR[0] ~ PVR [11] 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 22 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 21 ~ 31 セマ ン テ ィ ク ス 16 ~ 31 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 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) 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 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 23 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 21 ~ 31 セマ ン テ ィ ク ス 16 ~ 31 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 BGEID Ra,Imm 101111 10101 Ra Imm PC := PC + s(Imm) if Ra >= 0 LBU Rd,Ra,Rb 110000 Rd Ra Rb 00000000000 Addr := Ra + Rb Rd[0:23] := 0 Rd[24:31] := *Addr[0:7] LHU Rd,Ra,Rb 110001 Rd Ra Rb 00000000000 Addr := Ra + Rb Rd[0:15] := 0 Rd[16:31] := *Addr[0:15] LW Rd,Ra,Rb 110010 Rd Ra Rb 00000000000 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 110100 Rd Ra Rb 00000000000 Addr := Ra + Rb *Addr[0:8] := Rd[24:31] SH Rd,Ra,Rb 110101 Rd Ra Rb 00000000000 Addr := Ra + Rb *Addr[0:16] := Rd[16:31] SW Rd,Ra,Rb 110110 Rd Ra Rb 00000000000 Addr := Ra + Rb *Addr := Rd SWX Rd,Ra,Rb 110110 Rd Ra Rb 10000000000 Addr := Ra + Rb Rd := *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] 24 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令 表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き ) タ イプ A 0~5 6 ~ 10 11 ~ 15 16 ~ 20 タ イプ B 0~5 6 ~ 10 11 ~ 15 21 ~ 31 セマ ン テ ィ ク ス 16 ~ 31 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 1. 浮動小数点の演算には特殊な ケー ス が多数あ る ため、 通常の演算のみを示 し ま す。 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 にす べての演算が リ ス ト さ れてい ます。 セマ フ ォの同期化 テ ス ト と セ ッ ト 、 比較 と ス ワ ッ プ、 メ モ リ 交換、 フ ェ ッ チ と 追加な ど の共通セマ フ ォ操作を イ ンプ リ メ ン ト す る には、 LWX お よ び SWX. 命令が使用 さ れます。 ま た、 ス ピ ン ロ ッ ク の イ ンプ リ メ ン ト に も 使用 さ れます こ れ ら の命令は、 通常、 シ ス テ ム プ ロ グ ラ ムに よ っ て使用 さ れ、 随時アプ リ ケーシ ョ ン プ ロ グ ラ ム に よ っ て呼び出 さ れます。一般的には、 メ モ リ か ら セマ フ ォ を読み込むにはプ ロ グ ラ ムに よ り LWX が使用 さ れ、 予約が設定 さ れます ( まずはプ ロ セ ッ サが予約を保持)。 セマ フ ォ の値に基づいて結果 が計算 さ れ、 SWX 命令を使用 し て結果値は同 じ メ モ リ ロ ケーシ ョ ンに条件付で保存 さ れます。 条 件付保存は、 直前の LWX 命令に よ っ て確立 さ れた予約を基に実行 さ れます。 保存が実行 さ れ る と き に予約が存在す る 場合、保存が実行 さ れ MSR [C] が 0 に ク リ ア さ れます。予約が存在 し ない場合、 タ ーゲ ッ ト メ モ リ ロ ケーシ ョ ンは変更 さ れず、 MSR [C] が 1 に設定 さ れます。 保存が問題な く 完了す る と 、 セマ フ ォ読み込みか ら セマ フ ォ保存ま での命令シーケ ン ス が実行 さ れ ます。 ほかのデバ イ ス は読み出 し と ア ッ プデー ト の間のセマ フ ォ ロ ケーシ ョ ン を変更 し ません。 ほ かのデバ イ ス は、 操作中にセマ フ ォ ロ ケーシ ョ ンか ら 読み出す こ と がで き ます。 セマ フ ォ操作が正 し く 動作す る には、 必ず LWX 命令を SWX 命令 と ペアで使用 し 、 同 じ ア ド レ ス を指定す る よ う に し ます。 MicroBlaze では予約設定は ワ ー ド 単位で行われます。 両方の命令に対 し 、 ア ド レ ス の ワ ー ド が一致 し てい る 必要があ り ます。こ れ ら の命令に対 し ては ワー ド 不一致の例外が生成 さ れません。 条件付保存は、 保存ア ド レ ス が予約を設定す る読み込みア ド レ ス と 一致 し ていない場合で も 、 予約 が存在す る 場合常に実行 さ れます。 予約は 1 度に 1 つ し か管理で き ません。 予約に関連 し たア ド レ スは後続の LWX 命令を実行す る と 変更で き ます。条件付保存は先の LWX 命令に よ り 確立 さ れた予約に基づ き実行 さ れます。SWX 命 令を実行す る と 、 LWX で確立 さ れた も の と ア ド レ ス が一致す る か ど う かにかかわ ら ず、 常にプ ロ セ ッ サで保持 さ れてい る予約が ク リ アにな り ます。 リ セ ッ ト 、 割 り 込み、 例外、 お よ びブ レー ク (BRK お よ び BRKI 命令を含む) はすべて予約を ク リ ア し ます。 LWX お よ び SWX 命令を使用す る ための一般的なガ イ ド ラ イ ンは次の よ う にな っ てい ます。 • • LWX お よ び SWX 命令はペアで使用 し 、 同 じ ア ド レ ス を使用 し ます。 ペアにな っ てお ら ず、 別のア ド レ ス に指定 さ れてい る SWX 命令は、 プ ロ セ ッ サで保持 さ れて い る 予約を ク リ アす る ために使用す る こ と がで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 25 第 1 章 : MicroBlaze アーキテ ク チ ャ • • LWX 命令で条件付シーケ ン スは開始 し ます。 その後、 メ モ リ ア ク セ ス ま たは読み込まれた値 に基づいた計算が続 き ます。 シーケ ン スは SWX 命令で終了 し ます。 ほ と ん ど の場合、 SWX 命令のエ ラ ーは LWX に返 さ れ、 再試行 さ れます。 LWX 命令で読み込まれた値が 0 でない場合、 同期化プ リ ミ テ ィ ブ よ っ ては実行す る と き に LWX をペアに し な く て も か ま い ません。 こ れは、 テ ス ト と セ ッ ト の イ ンプ リ メ ン テーシ ョ ン 例です。 loop: lwx bnei addik swx addic bnei next: • r5,r3,r0 r5,next r5,r5,1 r5,r3,r0 r5,r0,0 r5,loop ; ; ; ; ; ; load and reserve branch if not equal to zero increment value try to store non-zero value check reservation loop if reservation lost LWX 命令で求め る値が返 さ れない場合、 LWX 命令のループ を最小限にす る こ と で、 パ フ ォーマ ン ス を改善す る こ と がで き ます。 ま た、 初期値チ ェ ッ ク を実行す る ため普通の読み込 み命令を使用 し て、 パフ ォーマン ス を改善す る こ と も で き ます。 こ れは、 ス ピ ン ロ ッ ク の イ ン プ リ メ ン テーシ ョ ン例です。 loop: lw r5,r3,r0 ; load the word bnei r5,loop ; loop back if word not equal to 0 lwx r5,r3,r0 ; try reserving again bnei r5,loop ; likely that no branch is needed addik r5,r5,1 ; increment value swx r5,r3,r0 ; try to store non-zero value addic r5,r0,0 ; check reservation bnei r5,loop ; loop if reservation lost • LWX/SWX 命令ペアのループを最小限にす る こ と で、 前に進め る可能性が高ま り ます。 古い 値は保存実行前にテ ス ト す る必要があ り ます。 順序が逆にな っ てい る場合 ( 読み込みの前に保 存が行われ る 場合 )、 さ ら に多 く の SWX 命令が実行 さ れ、 LWX と SWX 間の予約が失われ る 可能性が高ま り ます。 26 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ レジス タ MicroBlaze は直交命令セ ッ ト アーキテ ク チ ャ で、 32 個の 32 ビ ッ ト 汎用レ ジ ス タ と 最大 18 個の 32 ビ ッ ト 特殊用途レ ジ ス タ が含ま れます。 特殊用途レ ジ ス タ の数は、 設定す る オプシ ョ ンに よ っ て 異な り ます。 汎用レ ジ ス タ 32 個の 32 ビ ッ ト 汎用レ ジ ス タ には、 R0 ~ R31 と い う 番号が付け ら れてい ます。 レ ジ ス タ フ ァ イ ルは、ビ ッ ト ス ト リ ームのダ ウ ン ロ ー ド 時に リ セ ッ ト さ れます。 リ セ ッ ト 値は 0x00000000 です。 図 1-2 に汎用レ ジ ス タ を、 表 1-7 に各レ ジ ス タ の説明お よ び リ セ ッ ト 値 (存在す る場合) を示 し ます。 メ モ : レ ジ ス タ フ ァ イ ルは、 外部 リ セ ッ ト 入力 Reset お よ び Debug_Rst では リ セ ッ ト さ れません。 0 31 ↑ R0 ~ R31 図 1-2 : R0 ~ R31 表 1-7 : 汎用レ ジ ス タ (R0 ~ R31) ビッ ト 0:31 名前 R0 説明 リセッ ト値 常に 0 です。 書 き込まれたデー タ は、すべて破棄 さ れます。 0x00000000 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 32 ビ ッ ト 汎用レ ジ ス タ 。 - 汎用レ ジ ス タ の ソ フ ト ウ ェ アでの使用規則については、 表 3-2 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 27 第 1 章 : MicroBlaze アーキテ ク チ ャ 特殊用途レ ジ ス タ プ ロ グ ラ ム カ ウ ン タ (PC) プ ロ グ ラ ム カ ウ ン タ (PC) は例外命令の 32 ビ ッ ト ア ド レ ス で、 MFS 命令を使用 し て読み出す こ と は可能ですが、 MTS 命令を使用 し て書 き込む こ と はで き ません。 MFS 命令を使用する 場合、 PC レ ジ ス タ は Sa = 0x0000 で指定 し ます。 図 1-3 に PC を、表 1-8 に説明お よび リ セ ッ ト 値を示 し ます。 0 31 ↑ PC 図 1-3 : PC 表 1-8 : プ ログ ラム カ ウン タ (PC) ビッ ト 0:31 名前 PC 説明 リセッ ト値 0x00000000 プログラ ム カウン タ 実行命令のア ド レ ス。 「mfs r2 0」 では、 mfs 命令のア ド レ ス が R2 に格納 さ れます。 マ シ ン ス テー タ ス レ ジ ス タ (MSR) マシ ン ス テー タ ス レ ジ ス タ には、 プ ロ セ ッ サの コ ン ト ロ ール ビ ッ ト お よ びス テー タ ス ビ ッ ト が含 まれます。 MFS 命令を使用 し て読み出す こ と がで き ます。 MSR を読み出す際、 ビ ッ ト 29 がキ ャ リ ー コ ピー と し て ビ ッ ト 0 に複製 さ れます。 MSR は、 MTS 命令ま たは専用命令であ る MSRSET お よ び MSRCLR を使用 し て書 き 込む こ と がで き ます。 MSRSET ま たは MSRCLR を使用 し て MSR に書 き 込む と 、キ ャ リ ー ビ ッ ト はすぐ に変化 し 、その 他のビ ッ ト は 1 ク ロ ッ ク サ イ ク ル後に変化 し ます。 MTS を使用 し て書 き込む と 、 すべての ビ ッ ト が 1 ク ロ ッ ク サ イ ク ル後に有効にな り ます。 ビ ッ ト 0 に書 き 込まれた値は、 すべて破棄 さ れます MSR を MTS ま たは MFS 命令 と 使用す る場合は、 MSR を Sx = 0x0001 で指定 し ます。 図 1-4 に MSR レ ジ ス タ を、 表 1-9 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 0 ↑ CC 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ↑ 予約済み ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ VMS VM UMS UM PVR EIP EE DCE DZO ICE FSL BIP C IE BE 図 1-4 : MSR 28 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) ビッ ト 0 名前 CC 説明 演算キ ャ リ ーの コ ピー リセッ ト値 0 演算キ ャ リ ー ( ビ ッ ト 29) の コ ピーです。 CC は 常にビ ッ ト C と 同 じ です。 1:16 予約済み 17 VMS 仮想保護モー ド での保存 0 MMU を使用す る場合のみ (C_USE_MMU > 1 かつ C_AREA_OPTIMIZED = 0) 読み出 し /書き 込み 18 VM 仮想保護モー ド 0 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) 読み出 し /書き 込み 19 UMS ユーザー モー ド での保存 0 MMU を使用す る場合のみ (C_USE_MMU > 0 かつ C_AREA_OPTIMIZED = 0) 読み出 し /書き 込み 20 UM ユーザー モー ド 0 0 : 特権モー ド 。 すべての命令が許可 さ れます。 1 : ユーザー モード 。 一部の命令は許可さ れま せん。 MMU を使用す る場合のみ (C_USE_MMU > 0 かつ C_AREA_OPTIMIZED = 0) 読み出 し /書き 込み 21 PVR プ ロ セ ッ サ バージ ョ ン レ ジ ス タ の有無 C_PVR のパ ラ 0 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ な し 1 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ あ り メ ー タ に依存 読み出 し のみ MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 29 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き ) ビッ ト 22 名前 EIP 説明 リセッ ト値 0 例外実行中 0 : 実行中のハー ド ウ ェ ア例外な し 1 : ハー ド ウ ェ ア例外を実行中 例外がサポー ト さ れてい る場合のみ (C_*_EXCEPTION ま たは C_USE_MMU) 読み出 し /書き 込み 23 EE 0 例外 イ ネーブル 0 : ハー ド ウ ェ ア例外がデ ィ ス エーブル1 1 : ハー ド ウ ェ ア例外が イ ネーブル 例外がサ ポー ト さ れ て い る 場合のみ (C_*_EXCEPTION ま たは C_USE_MMU) 読み出 し /書き 込み 24 DCE 0 デー タ キ ャ ッ シ ュ イ ネーブル 0 : デー タ キ ャ ッ シ ュ がデ ィ ス エーブル 1 : デー タ キ ャ ッ シ ュ が イ ネーブル デー タ キ ャ ッ シ ュ が使用 さ れてい る場合のみ (C_USE_DCACHE = 1) 読み出 し /書き 込み 25 DZO 0 での除算ま たは除算オーバーフ ロ ー2 0 0 : 0 での除算な し 、 ま たは除算オーバーフ ロ ー の発生 1 : 0 での除算あ り 、 ま たは除算オーバーフ ロ ー の発生 ハー ド ウ ェ ア除算器が使用 さ れてい る 場合のみ (C_USE_DIV = 1) 読み出 し /書き 込み 26 ICE 0 命令キ ャ ッ シ ュ イ ネーブル 0 : 命令キ ャ ッ シ ュ がデ ィ ス エーブル 1 : 命令キ ャ ッ シ ュ が イ ネーブル 命令 キ ャ ッ シ ュ が使用 さ れ て い る 場合のみ (C_USE_ICACHE = 1) 読み出 し /書き 込み 30 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き ) ビッ ト 27 名前 FSL 説明 FSL エ ラ ー リセッ ト値 0 0 : FSL の get/getd/put/putd でエ ラ ーな し 1 : FSL の get/getd/put/putd で制御タ イ プが不 一致 FSL リ ン ク が使用 さ れてい る場合のみ (C_FSL_LINKS > 0) 読み出 し /書き 込み 28 BIP ブ レー ク 実行中 0 0 : 実行中のブ レー ク な し 1 : ブ レー ク 実行中 ブ レー ク の ソ ース は、 ソ フ ト ウ ェ アのブ レー ク 命令ま たは Ext_Brk ま たは Ext_NM_Brk ピ ン か ら のハー ド ウ ェ ア ブ レー ク のいずれかです。 読み出 し /書き 込み 29 C 演算キ ャ リ ー 0 0 : キ ャ リ ーな し ( ボ ロ ー ) 1 : キ ャ リ ー ( ボ ロ ーな し ) 読み出 し /書き 込み 30 IE 割 り 込み イ ネーブル 0 0 : 割 り 込みがデ ィ ス エーブル 1 : 割 り 込みが イ ネーブル 読み出 し /書き 込み 31 BE バス ロ ッ ク イ ネーブル3 0 0 : データ 側 OPB でのバス ロ ッ ク ディ ス エー ブル 1 : デー タ 側 OPB でのバ ス ロ ッ ク イ ネーブル バス ロ ッ ク イ ネーブルは、 IXCL、 DXCL、 ILMB、 DLMB、 IPLB、 DPLB、 ま たは IOPB の動作に影響 し ません。 デー タ 側 OPB が使用 さ れてい る 場合のみ 読み出 し /書き 込み 1. MMU 例外 (デー タ 格納例外、 命令格納例外、 デー タ TLB ミ ス 例外、 命令 TLB ミ ス例外) はデ ィ ス エーブルにで き ないため、 こ の ビ ッ ト の影響を受け ま せん。 2. こ の ビ ッ ト は、 整数が 0 で除算 さ れてい る こ と 、 ま たは除算オーバーフ ロ ーを示す信号でのみ使用 し ます。 FSR には、 浮動小数点 と 等価の も のがあ り ます。 DZO ビ ッ ト は、 プ ロ セ ッ サで例外処理 が イ ネーブルか ど う かにかかわ ら ず、 0 に よ る 除算ま たは除算オーバーフ ロ ーがあ る か ど う か を示 し ます。 3. バス プ ロ ト コ ルの詳細は、 IBM CoreConnect の仕様 『64-Bit On-Chip Peripheral Bus, Architectural Specifications, Version 2.0』 を参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 31 第 1 章 : MicroBlaze アーキテ ク チ ャ 例外ア ド レ ス レ ジ ス タ (EAR) 例外ア ド レ ス レ ジ ス タ は、 次の例外を発生 さ せた読み込み/格納の完全な ア ド レ ス を格納 し ます。 • 不整列ア ク セ ス に よ る例外 (不整列ア ク セ ス のア ド レ ス ) • DPLB ま たは DOPB 例外 (実行で き なか っ た PLB ま たは OPB デー タ ア ク セ ス のア ド レ ス ) • デー タ 格納例外 ( ア ク セ ス さ れた (仮想) 有効ア ド レ ス ) • 命令格納例外 (読み出 さ れた (仮想) 有効ア ド レ ス ) • デー タ TLB ミ ス 例外 ( ア ク セ ス さ れた (仮想) 有効ア ド レ ス ) • 命令 TLB ミ ス 例外 (読み出 さ れた (仮想) 有効ア ド レ ス ) その他の例外では、 こ のレ ジ ス タ の内容は定義さ れて いま せん。 EAR を MFS 命令で読み出す場 合、 Sa = 0x0003 で指定し ま す。 図 1-5 に EAR を 、 表 1-10 にビ ッ ト の説明およ びリ セッ ト 値を 示 し ま す。 0 31 ↑ EAR 図 1-5 : EAR 表 1-10 : 例外ア ド レ ス レ ジ ス タ (EAR) ビッ ト 0:31 32 名前 EAR 説明 例外ア ド レ ス レ ジ ス タ japan.xilinx.com リセッ ト値 0x00000000 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 例外ス テー タ ス レ ジ ス タ (ESR) 例外ス テー タ ス レ ジ ス タ には、プ ロ セ ッ サの ス テー タ ス ビ ッ ト が含まれます。 ESR を MFS 命令で 読み出す場合、Sa = 0x0005 で指定 し ます。 図 1-6 に ESR レ ジ ス タ を示 し ます。表 1-11 に ビ ッ ト の 説明 と リ セ ッ ト 値を、 表 1-12 に例外ス テー タ ス (ESS) を示 し ます。 19 20 ↑ ↑ DS 予約済み 26 27 ↑ ESS 31 ↑ EC 図 1-6 : ESR 表 1-11 : 例外ス テー タ ス レ ジ ス タ (ESR) ビッ ト 名前 0:18 予約済み 19 DS 説明 遅延ス ロ ッ ト に よ る例外 リセッ ト値 0 0 : 遅延ス ロ ッ ト 命令に よ る例外な し 1 : 遅延ス ロ ッ ト 命令に よ る例外あ り 読み出 し のみ 20:26 ESS 例外ス テー タ ス 表 1-12 を参照 詳細は、 表 1-12 を参照 し て く だ さ い。 読み出 し のみ 27:31 EC 例外の原因 0 00000 : 高速シ ンプ レ ッ ク ス リ ン ク の例外 00001 : 不整列デー タ ア ク セ ス に よ る 例外 00010 : 不正な op コ ー ド に よ る 例外 00011 : 命令バ ス エ ラ ーに よ る 例外 00011 : デー タ バ ス エ ラ ーに よ る例外 00101 : 除算に よ る例外 00110 : 浮動小数点ユニ ッ ト に よ る例外 00111 : 特権命令に よ る例外 10000 : デー タ 格納に よ る例外 10001 : 命令格納に よ る例外 10010 : デー タ TLB ミ ス に よ る例外 10011 : 命令 TLB ミ ス に よ る 例外 読み出 し のみ MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 33 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-12 : 例外ス テー タ ス (ESS) 例外の原因 不整列デー タ ア クセス ビッ ト 20 名前 W 説明 ワ ー ド ア ク セ ス に よ る例外 リセッ ト値 0 0 : 不整列ハーフ ワー ド ア ク セ ス 1 : 不整列 ワー ド ア ク セ ス 21 S 格納ア ク セ ス に よ る例外 0 0 : 不整列読み込みア ク セ ス 1 : 不整列格納ア ク セ ス 22:26 Rx ソ ース /デス テ ィ ネーシ ョ ン レ ジ ス タ 0 不整列ア ク セ ス で ソ ース (格納) ま た はデス テ ィ ネーシ ョ ン (読み込み) と し て使用 さ れ る汎用レ ジ ス タ 不正な命令 20:26 予約済み 0 命令バ ス エ ラ ー 20:26 予約済み 0 デー タ バ ス エ ラ ー 20:26 予約済み 0 除算 20 DEC 除算 : 除算例外原因 0 0 :ゼ ロ での 除算 1 : 除算オーバーフ ロ ー 21:26 予約済み 0 浮動小数点ユニ ッ ト 20:26 予約済み 0 特権命令 20:26 予約済み 0 高速シ ンプ レ ッ ク ス リ ンク 20:22 予約済み 0 23:26 FSL 例外発生の原因 と な っ た高速シ ンプ レ ッ ク ス リ ン ク の イ ンデ ッ ク ス 0 デー タ格納 20 DIZ デー タ 格納 - ゾーン保護 0 0 : 実行 さ れていない 1 : 実行 さ れた 21 S デー タ 格納 - 格納命令 0 0 : 実行 さ れていない 1 : 実行 さ れた 命令格納 22:26 予約済み 20 DIZ 0 命令格納 - ゾーン保護 0 0 : 実行 さ れていない 1 : 実行 さ れた 21:26 34 予約済み japan.xilinx.com 0 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-12 : 例外ス テー タ ス (ESS) (続き ) 例外の原因 ビッ ト デー タ TLB ミ ス 名前 20 予約済み 21 S 説明 リセッ ト値 0 デー タ TLB ミ ス - 格納命令 0 0 : 実行 さ れていない 1 : 実行 さ れた 命令 TLB ミ ス 22:26 予約済み 0 20:26 予約済み 0 分岐 タ ーゲ ッ ト レ ジ ス タ (BTR) 分岐 タ ーゲ ッ ト レ ジ ス タ は、 MicroBlaze プ ロ セ ッ サで例外を使用す る よ う に設定 し た場合にのみ 存在 し ます。 MSR[EIP] = 0 の と き 、 実行 さ れ る 遅延ス ロ ッ ト の分岐命令すべてに対す る 分岐 タ ー ゲ ッ ト ア ド レ ス が レ ジ ス タ に格納 さ れます。 遅延ス ロ ッ ト に含まれ る 命令に よ り 例外が発生す る と (ESR[DS]=1)、例外ハン ド ラ は R17 に格納 さ れてい る 通常の例外ハン ド ラ の戻 り ア ド レ ス の代わ り に、 BTR に格納 さ れてい る ア ド レ ス に命令を戻 し ます。 BTR を MFS 命令で読み出す場合、 Sa = 0x000B で指定 し ます。 図 1-7 に BTR レ ジ ス タ を、 表 1-13 にビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 0 31 ↑ BTR 図 1-7 : BTR 表 1-13 : 分岐 タ ーゲ ッ ト レ ジ ス タ (BTR) ビッ ト 0:31 名前 BTR 説明 遅延ス ロ ッ ト に含まれ る命令に よ り 発生す る例外 か ら 戻 る と き にハン ド ラ で使用 さ れ る 分岐 タ ー ゲッ ト アド レス リセッ ト値 0x00000000 読み出 し のみ MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 35 第 1 章 : MicroBlaze アーキテ ク チ ャ 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (FSR) 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ には、 浮動小数点ユニ ッ ト の ス テー タ ス ビ ッ ト が含まれ ます。MFS 命令で読み出 し 、MTS 命令で書 き込む こ と がで き ます。 読み出 し ま たは書 き 込みを実行 す る 場合、 Sa = 0x0007 で指定 し ます。 浮動小数点ポ イ ン ト 命令はレ ジ ス タ の ビ ッ ト のみを セ ッ ト し 、レ ジ ス タ を ク リ アにす る には MTS 命令を使用する し かあ り ません。図 1-8 に FSR レ ジ ス タ を、 表 1-14 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 27 28 29 30 31 ↑ ↑ ↑ ↑ ↑ ↑ 予約済み IO DZ OF UF DO 図 1-8 : FSR 表 1-14 : 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (FSR) ビッ ト 名前 説明 リセッ ト値 0:26 予約済み 27 IO 不正な操作 0 28 DZ 0 での除算 0 29 OF オーバーフ ロ ー 0 30 UF ア ン ダーフ ロ ー 0 31 DO 非正規化オペ ラ ン ド エ ラ ー 0 未定義 例外デー タ レ ジ ス タ (EDR) 例外デー タ レ ジ ス タ には、 FSL 例外の原因 と な っ た FSL リ ン ク で読み出 さ れたデー タ が格納 さ れ ます。 その他の例外では、こ の レ ジ ス タ の内容は定義 さ れていません。 EDR を MFS 命令で読み出す場合、 Sa = 0x000D で指定 し ます。 図 1-9 に EDR レ ジ ス タ を、 表 1-15 にビ ッ ト の説明お よ び リ セ ッ ト 値 を示 し ます。 メ モ : C_FSL_LINKS が 0 よ り 大 き く 、C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れます。 0 31 ↑ EDR 図 1-9 : EDR 36 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-15 : 例外デー タ レ ジ ス タ (EDR) ビッ ト 0:31 名前 EDR 説明 リセッ ト値 0x00000000 例外デー タ レ ジ ス タ プ ロ セ ス識別レ ジ ス タ (PID) MMU ア ド レ ス変換の実行中に、 ソ フ ト ウ ェ ア プ ロ セ ス を識別す る ために使用 し ます。 MicroBlaze では、 C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンで制御 し ます。 C_USE_MMU が 1 よ り 大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る場合にのみ イ ンプ リ メ ン ト さ れます。 MFS お よ び MTS 命令で PID にア ク セ スす る場合、Sa = 0x1000 で指定 し ます。 こ の レ ジ ス タ へのア ク セ ス は、 メ モ リ 管理用の特殊な レ ジ ス タ のパ ラ メ ー タ 、 C_MMU_TLB_ACCESS の設定に従い ます。 ま た、 TLB エン ト リ へのア ク セ ス に も 使用 さ れます。 • TLBHI (Translation Look-Aside Buffer High) を書 き込む際に、 PID の値は TLB エン ト リ の TID フ ィ ール ド に格納 さ れます。 • TLBHI を読み出 し 、 ま た MSR[UM] が設定 さ れていない場合は、 TID フ ィ ール ド の値が PID に格納 さ れます。 図 1-10 に PID レ ジ ス タ を、 表 1-16 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 24 31 ↑ ↑ 予約済み PID 図 1-10 : PID 表 1-16 : プ ロ セス識別レ ジ ス タ (PID) ビッ ト 名前 0:23 予約済み 24:31 PID 説明 MMU ア ド レ ス変換の実行中に、 ソ フ ト ウ ェ ア プ リセッ ト値 0x00 ロ セ ス を識別 読み出 し /書 き 込み MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 37 第 1 章 : MicroBlaze アーキテ ク チ ャ ゾーン保護レ ジ ス タ (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 の設定に従い ます。 図 1-11 に ZPR レ ジ ス タ を、 表 1-17 に ビ ッ ト の説明お よび リ セ ッ ト 値を示 し ます。 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ZP0 ZP1 ZP2 ZP3 ZP4 ZP5 ZP6 ZP7 ZP8 ZP9 ZP10 ZP11 ZP12 ZP13 ZP14 ZP15 図 1-11 : ZPR 表 1-17 : ゾーン保護レ ジ ス タ (ZPR) ビッ ト 名前 説明 リセッ ト値 0:1 ZP0 ゾーン保護 0x00000000 2:3 ZP1 ユーザー モー ド (MSR[UM] = 1) ... ... 00 : TLB エン ト リ の V を無効にする 。 ページへのア ク セ 30:31 ZP15 スは許可 さ れません。 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 を無効にす る。 書 き 込みお よ び実行可能 と し てページにア ク セ ス し ます。 読み出 し /書 き 込み 38 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO) MMU の UTLB (Unified Translation Look-Aside Buffer) エン ト リ へのア ク セス に使用し ま す。 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 では リ セ ッ ト さ れません。 図 1-12 に TLBLO レ ジ ス タ を、 表 1-18 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 0 22 23 24 28 29 30 31 ↑ ↑ ↑ ↑ RPN EX WR ZSEL ↑ ↑ ↑ ↑ W I M G 図 1-12 : TLBLO 表 1-18 : 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO) ビッ ト 0:21 名前 RPN 説明 実 (物理) ページ番号 リセッ ト値 0x000000 TLB ヒ ッ ト が発生す る と 、 こ の フ ィ ール ド が TLB エン ト リ か ら 読み出 さ れ、 物理ア ド レ ス の作成に使用 さ れま す。 SIZE フ ィ ール ド の値に よ っ ては RPN ビ ッ ト の一部 は物理ア ド レ ス には使用 さ れないため、 ソ フ ト ウ ェ アで こ の フ ィ ール ド の未使用ビ ッ ト を 0 にする 必要があ り ま す。 C_USE_MMU=3 の場合のみ 読み出 し /書 き 込み 22 EX 実行フ ァ イ ル 0 1 に設定す る と ページに実行 コ ー ド が含まれ、 命令は ページ よ り フ ェ ッ チで き ます。 0 の場合は、 命令はページ か ら フ ェ ッ チで き ません。 EX ビ ッ ト が 0 のページか ら 命 令を フ ェ ッ チす る と 、 命令格納例外が発生 し ます。 読み出 し /書 き 込み MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 39 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-18 : 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO) (続き ) ビッ ト 23 名前 WR 説明 リセッ ト値 0 書 き込み可能 1 に設定す る と ページは書 き込み可能で、 格納命令を使 用 し てページ内のア ド レ ス ににデー タ を格納で き ます。 0 の場合は、 ページは読み出 し のみで、 書 き込みで き ま せん。 WR ビ ッ ト が 0 のページにデー タ を格納す る と 、 デー タ 格納例外が発生 し ます。 読み出 し /書 き 込み 24:27 ZSEL 0x0 ゾーン選択 ゾーン保護レ ジ ス タ (ZPR) の 16 個のゾーン フ ィ ール ド (Z0 ~ Z15) か ら 1 個を選択 し ます。 ZSEL が 0x5 の場合は、 ゾーン フ ィ ール ド Z5 が選択 さ れます。 選択 さ れた ZPR フ ィ ール ド は、TLB エン ト リ の EX フ ィ ール ド お よ び WR フ ィ ール ド で指定 さ れた ア ク セ ス保護の変更に使用 さ れます。 ま た、 TLB エン ト リ の V (有効) フ ィ ール ド を無効に し 、 ページがア ク セ ス さ れ ない よ う に し ます。 読み出 し /書 き 込み 28 W 1 ラ イ ト スルー パ ラ メ ー タ C_DCACHE_USE_WRITEBACK が 1 に設定 さ れ てい る場合、 こ の ビ ッ ト はキ ャ ッ シ ュ ポ リ シーを制御 し ます。 ラ イ ト スルーは 1 に設定 さ れてい る 場合に選択 さ れ、 それ以外の場合は ラ イ ト バ ッ ク が選択 さ れます。 C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れない限 り 、 こ の ビ ッ ト は 1 に固定 さ れていて、 ラ イ ト スルーが 常に使用 さ れます。 読み出 し /書 き 込み 29 I 0 キ ャ ッ シ ュ の抑止 1 に設定 さ れ る と 、 ページへのア ク セ ス はキ ャ ッ シ ュ さ れません。 0 の場合は、 ページへのア ク セ スはキ ャ ッ シ ュ可能です。 読み出 し /書 き 込み 40 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-18 : 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO) (続き ) ビッ ト 30 名前 M 説明 リセッ ト値 0 メ モ リ コ ヒ ーレ ン ト メ モ リ の コ ヒ ーレ ン スは MicroBlaze では イ ンプ リ メ ン ト さ れないため、 こ の ビ ッ ト は 0 に固定 さ れてい ます。 読み出 し のみ 31 G 0 保護 ビ ッ ト が 1 に設定 さ れ る と 、 メ モ リ は保護 さ れ、 論理的 なページ ア ク セ スは許可 さ れません。 0 の場合は、 論理的なページ ア ク セ ス が許可 さ れます。 G 属性は、 メ モ リ マ ッ プ さ れた I/O デバ イ ス が不適切な 命令か ら ア ク セ ス さ れない よ う に保護 し ます。 読み出 し /書 き 込み 変換ル ッ ク アサイ ド バ ッ フ ァ High レ ジ ス タ (TLBHI) MMU の UTLB (Unified Translation Look-Aside Buffer) エン ト リ へのアク セス に使用し ま す。 MicroBlaze では、C_USE_MMU コ ン フ ィ ギュ レ ーショ ン オプショ ン で制御し ま す。 C_USE_MMU が 1 よ り 大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れま す。 MFS お よ び MTS 命令で TLBHI にア ク セ スす る場合、 Sa = 0x1004 で指定 し ます。 TLBHI の 読み出 し ま たは書 き 込みでは、TLBX レ ジ ス タ で イ ンデ ッ ク ス を付け ら れた UTLB エン ト リ がア ク セ ス さ れます。 こ の レ ジ ス タ の読み出 し は、メ モ リ 管理用の特殊な レ ジ ス タ のパ ラ メ ー タ 、C_MMU _TLB_ACCESS の設定に従い ます。 ま た、 TLB エン ト リ へのア ク セ ス に も 使用 さ れます。 • 書 き 込みでは、 PID の値が TLB エン ト リ の TID フ ィ ール ド に格納 さ れます。 • 読み出 し て、 MSR[UM] が設定 さ れていない場合は、 TID フ ィ ール ド の値が PID に格納 さ れ ます。 UTLB は、 ビ ッ ト ス ト リ ームがダ ウ ン ロ ー ド さ れ る と リ セ ッ ト さ れます。 リ セ ッ ト 値はすべての TLBHI エン ト リ で 0x00000000 です。 メ モ : UTLB は、 外部 リ セ ッ ト 入力 Reset お よ び Debug_Rst では リ セ ッ ト さ れません。 図 1-13 に TLBHI レ ジ ス タ を、 表 1-19 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 0 22 25 26 27 28 ↑ ↑ TAG SIZE ↑ ↑ ↑ V E U0 31 ↑ 予約済み 図 1-13 : TLBHI MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 41 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-19 : 変換ル ッ ク アサイ ド バ ッ フ ァ High レ ジ ス タ (TLBHI) ビッ ト 0:21 名前 TAG 説明 リセッ ト値 0x000000 TLB エン ト リ タ グ 仮想 メ モ リ ア ド レ ス のページ番号部分 と 比較 さ れます。 比較は SIZE フ ィ ール ド で制御 さ れます。 読み出 し /書 き 込み 22:24 SIZE 000 サイズ ページ サ イ ズ を指定 し ます。 TAG フ ィ ール ド と 仮想 メ モ リ ア ド レ ス のページ番号部分の比較で使用 さ れ る ビ ッ ト の範囲を制御 し ます。 こ の フ ィ ール ド で定義 さ れ る ページ サ イ ズは表 1-34 を参照 し て く だ さ い。 読み出 し /書 き 込み 25 V 0 有効 1 に設定 さ れた場合、 TLB エン ト リ は有効で、 ページ 変換エン ト リ を含んでい ます。 0 の場合は、 TLB エン ト リ は無効です。 読み出 し /書 き 込み 26 E 0 エンデ ィ ア ン MicroBlaze のページへのア ク セ スは常に ビ ッ グ エン デ ィ ア ン形式であ る ため、 こ の ビ ッ ト は 0 に固定 さ れて い ます。 読み出 し のみ 27 U0 0 ユーザー定義 MicroBlaze にはユーザー定義の格納属性がないため、 こ の ビ ッ ト は 0 に固定 さ れてい ます。 読み出 し のみ 28:31 42 予約済み japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 変換ル ッ ク アサイ ド バ ッ フ ァ イ ンデ ッ ク ス レ ジ ス タ (TLBX) TLBLO お よ び TLBHI レ ジ ス タ にア ク セ スす る場合に、 UTLB (Unified Translation Look-Aside Buffer) への イ ンデ ッ ク ス と し て使用 し ます。 MicroBlaze では、 C_USE_MMU コ ン フ ィ ギ ュ レー シ ョ ン オプシ ョ ンで制御 し ます。 C_USE_MMU が 1 よ り 大き く 、 C_AREA_OPTIMIZED が 0 に 設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れます。 MFS お よ び MTS 命令で TLBX にア ク セ ス す る 場合、 Sa = 0x1002 で指定 し ます。 図 1-14 に TLBX レ ジ ス タ を、 表 1-20 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 0 26 ↑ MISS 31 ↑ ↑ 予約済み INDEX 図 1-14 : TLBX 表 1-20 : 変換ル ッ ク アサイ ド バ ッ フ ァ イ ンデ ッ ク ス レ ジ ス タ (TLBX) ビッ ト 0 名前 MISS 説明 TLB ミ ス リセッ ト値 0 TLBSX レ ジ ス タ が、 TLB エン ト リ に含まれた仮想ア ド レ ス を使用 し て書き 込まれ る と 、 0 にな り ます。 仮想ア ド レ ス が TLB エン ト リ に含まれない場合は 1 に な り ます。 TLBX レ ジ ス タ 自身が書 き 込まれた場合 も 0 にな り ます。 読み出 し のみ メ モ リ 管理用の特殊レ ジ ス タ のパ ラ メ ー タ C_MMU_TLB_ACCESS > 0 の場合に読み出す こ と が で き ます。 1:25 予約済み 26:31 INDEX TLB イ ンデ ッ ク ス 000000 TLBLO お よ び TLBHI レ ジ ス タ がア ク セ スす る TLB エ ン ト リ の イ ンデ ッ ク ス に使用 さ れます。 TLBSX レ ジ ス タ が、 対応する TLB エン ト リ に含まれた仮想ア ド レ ス を使用 し て書き 込まれ る と 、 こ の フ ィ ール ド は TLB イ ンデ ッ ク ス でア ッ プデー ト さ れます。 読み出 し /書き 込み メ モ リ 管理用の特殊レ ジ ス タ のパ ラ メ ー タ が C_MMU_TLB_ACCESS > 0 の場合に読み出 し お よ び 書き 込みがで き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 43 第 1 章 : MicroBlaze アーキテ ク チ ャ 変換ル ッ ク アサイ ド バ ッ フ ァ 検索イ ンデ ッ ク ス レ ジ ス タ (TLBSX) UTLB (Unified Translation Look-Aside Buffer ) での仮想ページ番号の検索に使用し ま す。 MicroBlaze では、C_USE_MMU コ ン フ ィ ギュ レ ーショ ン オプショ ン で制御し ま す。 C_USE_MMU が 1 よ り 大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れま す。 TLBSX を MTS 命令で書 き込む場合、Sa = 0x1005 で指定 し ます。 図 1-15 に TLBSX レ ジ ス タ を、 表 1-21 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。 0 22 31 ↑ ↑ VPN 予約済み 図 1-15 : TLBSX 表 1-21 : 変換ル ッ ク アサイ ド バ ッ フ ァ イ ンデ ッ ク ス検索レ ジ ス タ (TLBSX) ビッ ト 0:21 名前 VPN 説明 リセッ ト値 仮想ページ番号 仮想 メ モ リ ア ド レ ス のページ番号部分を表 し 、 仮想 メ モ リ ア ド レ ス のページ番号部分 と 比較 さ れます。 比較 は、 V ビ ッ ト が 1 に設定 さ れてい る 各 TLB エン ト リ の SIZE フ ィ ール ド で制御 さ れます。 仮想ページ番号が検出 さ れた場合は、 TLBX レ ジ ス タ は TLB エン ト リ の イ ンデ ッ ク ス を使用 し て書 き 込まれ、 TLBX の MISS ビ ッ ト は 0 にな り ます。 TLB エン ト リ で 仮想ページ番号が検出 さ れない場合は、 TLBX レ ジ ス タ の MISS ビ ッ ト が 1 に設定 さ れます。 書き 込みのみ 22:31 44 予約済み japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (PVR) プ ロ セ ッ サ バージ ョ ン レ ジ ス タ は、C_PVR コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンに よ り 制御 さ れま す。 • C_PVR を 0 に設定す る と PVR は イ ンプ リ メ ン ト さ れず、 MSR[PVR]=0 にな り ます。 • 1 に設定する と 最初の レ ジ ス タ PVR0 のみが イ ンプ リ メ ン ト さ れ、 2 に設定す る と PVR0 ~ PVR11 の 12 個の PVR レ ジ ス タ すべてが イ ンプ リ メ ン ト さ れます。 PVR を MFS 命令で読み出す場合、 Sa = 0x200x で指定 し ます。 x は 0x0 ~ 0xB の レ ジ ス タ 番号で 指定 し ます。 表 1-22 ~ 表 1-33 に、 ビ ッ ト の説明お よ び値を示 し ます。 表 1-22 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 (PVR0) ビッ ト 名前 説明 値 0 CFG PVR の イ ンプ リ メ ン テーシ ョ ン : 0 = 基本、 1 = フル C_PVR の値に依存 1 BS バ レル シ フ タ の使用 C_USE_BARREL 2 DIV 除算器の使用 C_USE_DIV 3 MUL ハー ド ウ ェ ア乗算器の使用 C_USE_HW_MUL > 0 4 FPU FPU の使用 C_USE_FPU > 0 5 EXC 例外の使用 6 ICU 命令キ ャ ッ シ ュ の使用 C_USE_ICACHE 7 DCU デー タ キ ャ ッ シ ュ の使用 C_USE_DCACHE 8 MMU MMU の使用 C_USE_MMU > 0 9:15 予約済み MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) C_*_EXCEPTION の値に依存 ま た、 C_USE_MMU > 0 の場合 0 japan.xilinx.com 45 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-22 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 (PVR0) (続き ) ビッ ト 16:23 名前 MBV 説明 値 MicroBlaze リ リ ース バージ ョ ン 各 リ リ ース固有 コー ド 0x1 = v5.00.a 0x2 = v5.00.b 0x3 = v5.00.c 0x4 = v6.00.a 0x6 = v6.00.b 0x5 = v7.00.a 0x7 = v7.00.b 0x8 = v7.10.a 0x9 = v7.10.b 0xA = v7.10.c 0xB = v7.10.d 0xC = v7.20.a 0xD = v7.20.b 0xE = v7.20.c 0xF = v7.20.d 24:31 USR1 C_PVR_USER1 ユーザー コ ン フ ィ ギ ュ レーシ ョ ン値 1 表 1-23 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 1 (PVR1) ビッ ト 0:31 名前 USR2 説明 値 C_PVR_USER2 ユーザー コ ン フ ィ ギ ュ レーシ ョ ン値 2 表 1-24 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 2 (PVR2) ビッ ト 46 名前 説明 値 0 DOPB 使用中のデー タ 側 OPB C_D_OPB 1 DLMB 使用中のデー タ 側 LMB C_D_LMB 2 IOPB 使用中の命令側 OPB C_I_OPB 3 ILMB 使用中の命令側 LMB C_I_LMB 4 IRQEDGE エ ッ ジで ト リ ガ さ れ る 割 り 込み C_INTERRUPT_IS_EDGE 5 IRQPOS 立ち上が り エ ッ ジへの割 り 込み C_EDGE_IS_POSITIVE 6 DPLB 使用中のデー タ 側 PLB C_D_PLB japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-24 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 2 (PVR2) (続き ) ビッ ト 名前 説明 値 7 IPLB 使用中の命令側 PLB C_I_PLB 8 INTERCON PLB イ ン タ ー コ ネ ク ト の使用 C_INTERCONNECT 9:11 予約済み 12 FSL 拡張 FSL 命令の使用 C_USE_EXTENDED_FSL_INSTR 13 FSLEXC FSL 制御ビ ッ ト 不一致に よ る例 C_FSL_EXCEPTION 外の生成 14 MSR MSRSET 命令お よ び MSRCLR C_USE_MSR_INSTR 命令の使用 15 PCMP パ タ ーン比較命令の使用 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 20 FPU FPU の使用 C_USE_FPU > 0 21 MUL64 64 ビ ッ ト ハー ド ウ ェ ア乗算器 C_USE_HW_MUL = 2 の使用 22 FPU2 浮動小数点変換お よ び平方根命 令の使用 C_USE_FPU = 2 23 IPLBEXC IPLB エ ラ ーに よ る 例外の生成 C_IPLB_BUS_EXCEPTION 24 DPLBEXC DPLB エ ラ ーに よ る例外の生成 C_DPLB_BUS_EXCEPTION 25 OP0EXC 不正な op コ ー ド 0x0 に よ る 例 外の生成 C_OPCODE_0x0_ILLEGAL 26 UNEXC 不整列デー タ ア ク セ ス に よ る 例 外の生成 C_UNALIGNED_EXCEPTIONS 27 OPEXC 不正な op コー ド に よ る例外の 生成 C_ILL_OPCODE_EXCEPTION 28 IOPBEXC IOPB エ ラ ーに よ る例外の生成 C_IOPB_BUS_EXCEPTION 29 DOPBEXC DOPB エ ラ ーに よ る例外の生成 C_DOPB_BUS_EXCEPTION 30 DIVEXC 0 での除算ま たは除算オーバー C_DIV_ZERO_EXCEPTION フ ロ ーに よ る 例外の生成 31 FPUEXC MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) FPU に よ る 例外の生成 japan.xilinx.com C_FPU_EXCEPTION 47 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-25 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 3 (PVR3) ビッ ト 名前 0 DEBUG 1:2 予約済み 3:6 PCBRK 7:9 予約済み 10:12 RDADDR 13:15 予約済み 16:18 WRADDR 19 予約済み 20:24 FSL 25:31 予約済み 説明 値 デバ ッ グ ロ ジ ッ ク の使用 C_DEBUG_ENABLED PC ブ レー ク ポ イ ン ト の数 C_NUMBER_OF_PC_BRK 読み出 し ア ド レ ス ブ レー ク ポ イ ン ト の数 C_NUMBER_OF_RD_ADDR_BRK 書き 込みア ド レ ス ブ レー ク ポ イ ン ト の数 C_NUMBER_OF_WR_ADDR_BRK FSL の数 C_FSL_LINKS 表 1-26 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 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) 1 イ ンの長 さ の対数 11:15 ICBS 2 を底 と する 命令キ ャ ッ シ ュ のバ log2(C_CACHE_BYTE_SIZE) イ ト サ イ ズの対数 16 IAU 17 予約済み 18 ICI 19:31 予約済み すべての メ モ リ ア ク セ スへの命 令キ ャ ッ シ ュ の使用 C_ICACHE_ALWAYS_USED 0 命令キ ャ ッ シ ュ XCL プ ロ ト コ ル C_ICACHE_INTERFACE 0 表 1-27 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 5 (PVR5) ビッ ト 48 名前 説明 値 0 DCU デー タ キ ャ ッ シ ュ の使用 C_USE_DCACHE 1:5 DCTS デー タ キ ャ ッ シ ュ の タ グ サ イ ズ C_DCACHE_ADDR_TAG japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-27 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 5 (PVR5) (続き ) ビッ ト 名前 説明 値 6 予約済み 1 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 DCI デー タ キ ャ ッ シ ュ XCL プ ロ ト コル C_DCACHE_INTERFACE 19:31 予約済み 0 表 1-28 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 6 (PVR6) ビッ ト 0:31 名前 ICBA 説明 命令キ ャ ッ シ ュ のベース ア ド レ ス 値 C_ICACHE_BASEADDR 表 1-29 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 7 (PVR7) ビッ ト 0:31 名前 ICHA 説明 命令キ ャ ッ シ ュ のハ イ ア ド レ ス 値 C_ICACHE_HIGHADDR 表 1-30 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 8 (PVR8) ビッ ト 0:31 名前 DCBA 説明 デー タ キ ャ ッ シ ュ のベース アド レス 値 C_DCACHE_BASEADDR 表 1-31 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 9 (PVR9) ビッ ト 0:31 名前 DCHA MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 説明 デー タ キ ャ ッ シ ュ のハ イ アド レス japan.xilinx.com 値 C_DCACHE_HIGHADDR 49 第 1 章 : MicroBlaze アーキテ ク チ ャ 表 1-32 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 10 (PVR10) ビッ ト 0:7 名前 ARCH 説明 タ ーゲ ッ ト アーキ テ ク チ ャ : 値 パ ラ メ ー タ C_FAMILY に よ り 定義 0x6 : Spartan®-3、 XA Spartan-3 0x7 : Virtex-4、 QPro Virtex-4 Hi Rel QPro Virtex-4 Rad ト ラ レ ン ト 0x8 : Virtex-5 0x9 : Spartan-3E、 XA Spartan-3E 0xA : Spartan-3A、 XA Spartan-3A 0xB : Spartan-3AN 0xC : Spartan-3A DSP XA Spartan-3A DSP 0xD : Spartan-6 Virtex-6 8:31 0 予約済み 表 1-33 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 11 (PVR11) ビッ ト 0:1 名前 MMU 説明 MMU の使用 値 C_USE_MMU 0 : なし 1 : ユーザー モー ド 2 : 保護 3 : 仮想 50 2:4 ITLB 命令シ ャ ド ウ TLB のサ イ ズ log2(C_MMU_ITLB_SIZE) 5:7 DTLB デー タ シ ャ ド ウ TLB のサ イ ズ log2(C_MMU_DTLB_SIZE) japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) レジス タ 表 1-33 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 11 (PVR11) (続き ) ビッ ト 8:9 名前 TLBACC 説明 TLB レ ジ ス タ のア ク セ ス : 値 C_MMU_TLB_ACCESS 0 : 最小 1 : 読み出 し 2 : 書き 込み 3 : フル ア ク セ ス 10:14 ZONES メ モ リ 保護ゾーンの数 C_MMU_ZONES 15:16 予約済み 将来の使用に予約 0 17:31 RSTMSR MSR の リ セ ッ ト 値 C_RESET_MSR MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 51 第 1 章 : MicroBlaze アーキテ ク チ ャ パイ プ ラ イ ン アーキテ ク チ ャ MicroBlaze では、 命令の実行にパ イ プ ラ イ ン処理を使用 し ます。 ほ と んど の命令では、 各段を完了 す る のに 1 ク ロ ッ ク サ イ ク ルかか る ため、 1 つの命令を完了す る のに必要な ク ロ ッ ク サ イ ク ル数 は、 パ イ プ ラ イ ン段数に等 し く 、 サ イ ク ルご と に命令が 1 つ完了 し ます。 実行段に複数の ク ロ ッ ク サ イ ク ルを要す る 命令 も あ り ますが、 その場合は命令が完了す る ま で後続命令が ス ト ール し ます。 処理速度が低い メ モ リ か ら 実行す る場合、 フ ェ ッ チ段に複数サ イ ク ルかか る こ と があ り ます。 こ の レ イ テ ン シは、パ イ プ ラ イ ンの効率に直接影響 し ます。MicroBlaze では命令プ リ フ ェ ッ チ バ ッ フ ァ が イ ンプ リ メ ン ト さ れ、 こ の よ う な レ イ テ ン シの影響が軽減 さ れます。 命令実行段に複数サ イ ク ル かか る 命令でパ イ プ ラ イ ンが ス ト ール さ れ る場合で も 、プ リ フ ェ ッ チ バ ッ フ ァ に後続命令が読み込 まれます。 パ イ プ ラ イ ンが フ ェ ッ チ段を実行で き る よ う にな る と 、 プ リ フ ェ ッ チ バ ッ フ ァ か ら 新 し い命令を読み込む こ と がで き る ので、 命令 メ モ リ ア ク セ ス の完了を待つ必要はあ り ません。 命令が 自動変更 コ ー ド な ど で実行中に変更 さ れ る場合、 こ の変更 さ れた命令を実行す る前にプ リ フ ェ ッ チ バ ッ フ ァ を空に し て、 変更前の命令が含まれていない よ う にす る必要があ り ます。 こ の よ う にす る には、 BRI 4 な ど の同期分岐命令を使用 し ます。 3 段パイ プ ラ イ ン C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合は、 ハー ド ウ ェ アの使用量を最小限に抑え る た め、 パ イ プ ラ イ ンはフ ェ ッ チ、 デ コ ー ド 、 実行の 3 段に分かれます。 命令 1 サイ ク ル 1 サイ ク ル 2 サイ ク ル 3 フェ ッチ デコー ド 実行 フェ ッチ 命令 2 命令 3 サイ ク ル 4 サイ ク ル 5 サイ ク ル 6 デコー ド 実行 実行 実行 フェ ッチ デコー ド ス ト ール ス ト ール サイ ク ル 7 実行 5 段パイ プ ラ イ ン C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合は、 最大のパフ ォーマ ン ス を得 る ため、 パ イ プ ラ イ ンはフ ェ ッ チ (IF)、 デ コ ー ド (OF)、 実行 (EX)、 メ モ リ ア ク セ ス (MEM)、 ラ イ ト バ ッ ク (WB) の 5 段に分かれます。 命令 1 命令 2 命令 3 サイ ク ル サイ ク ル サイ ク ル サイ ク ル サイ ク ル サイ ク ル サイ ク ル サイ ク ル サイ ク ル 1 2 3 4 5 6 7 8 9 IF OF EX MEM WB IF OF EX MEM MEM MEM WB IF OF EX ス ト ール ス ト ール MEM WB 分岐 分岐が実行 さ れ る と 、通常はフ ェ ッ チ段お よ びデ コー ド 段 (プ リ フ ェ ッ チ バ ッ フ ァ も 含む) にあ る 命 令は破棄 さ れ、実行 さ れ る分岐ア ド レ ス か ら 新 し い命令が フ ェ ッ チ パ イ プ ラ イ ン段に読み込まれま す。 MicroBlaze では分岐の実行に 3 ク ロ ッ ク サ イ ク ルかか り ますが、 その う ち 2 サ イ ク ルがパ イ プ ラ イ ンの リ フ ィ ルに必要です。 こ のオーバーヘ ッ ド を少 し で も 削減す る ため、 MicroBlaze では遅 延ス ロ ッ ト を使用す る 分岐がサポー ト さ れてい ます。 52 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) パイ プ ラ イ ン アーキテ ク チ ャ 遅延ス ロ ッ ト 遅延ス ロ ッ ト を使用す る 分岐が実行 さ れ る と 、フ ェ ッ チ段階の命令のみが破棄 さ れ、デ コ ー ド 段 (分 岐遅延ス ロ ッ ト ) は完了 さ れます。 こ れに よ り 、 分岐に よ るペナルテ ィ が 2 ク ロ ッ ク サ イ ク ルか ら 1 ク ロ ッ ク サ イ ク ルに軽減 さ れます。 遅延ス ロ ッ ト を使用する 分岐命令には、 命令ニーモニ ッ ク の 後尾に D を追加 し ます。 た と えば、 BNE 命令 (遅延ス ロ ッ ト な し ) では後続命令は実行 さ れません が、 BNED 命令では分岐 ロ ケーシ ョ ンに移動す る前に後続命令が実行 さ れます。 遅延ス ロ ッ ト には、 IMM、 分岐、 ま たはブ レー ク 命令を含ま ない よ う に し ます。 割 り 込みお よ び外 部ハー ド ウ ェ アのブ レー ク は、 遅延ス ロ ッ ト を使用す る分岐が完了す る ま で保留 さ れます。 不整列ワ ー ド ま たはハーフ ワ ー ド の読み込みお よ び格納な ど、 回復が可能な例外が発生す る可能性 があ る命令は、 遅延ス ロ ッ ト に含め る こ と がで き ます。 遅延ス ロ ッ ト で例外が発生 し た場合、 ESR[DS] ビ ッ ト が設定 さ れ、 例外ハン ド ラ は特殊用途レ ジ ス タ の BTR に格納 さ れてい る 分岐 タ ー ゲ ッ ト に命令を戻 し ます。 レ ジ ス タ R17 は、 ESR[DS] ビ ッ ト が設定 さ れてい る と 無効にな り 、設定 さ れていなければ、 例外が発生 し た命令の後続のア ド レ ス を含みます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 53 第 1 章 : MicroBlaze アーキテ ク チ ャ メ モ リ アーキテ ク チ ャ MicroBlaze の メ モ リ はハーバー ド アーキ テ ク チ ャ 構造であ り 、 命令ア ク セ スお よ びデー タ ア ク セ ス に別々のア ド レ ス空間が使用 さ れます。 各ア ド レ ス空間は 32 ビ ッ ト の範囲で、 それぞれ 4GB ま での命令 メ モ リ お よ びデー タ メ モ リ を処理で き ます。命令 メ モ リ お よ びデー タ メ モ リ の範囲は、同 じ 物理 メ モ リ にマ ッ プ し てオーバー ラ ッ プ さ せ る こ と がで き ます。 こ れは、 ソ フ ト ウ ェ アのデバ ッ グで有益です。 MicroBlaze の命令お よ びデー タ イ ン タ ーフ ェ イ ス は 32 ビ ッ ト 幅で、 ビ ッ グ エンデ ィ ア ン形式で す。 デー タ メ モ リ へは、 ワー ド 、 ハーフ ワー ド 、 バ イ ト でア ク セ ス で き ます。 デー タ ア ク セ ス は、プ ロ セ ッ サで不整列の例外がサポー ト さ れてい る 場合を除 き 、 ワー ド ア ク セ ス は ワ ー ド の境界で、 ハーフ ワ ー ド ア ク セ スはハーフ ワー ド の境界で整列 さ せ る必要があ り ます。 命 令ア ク セ ス は、 すべて ワ ー ド の境界で整列 さ せ る必要があ り ます。 MicroBlaze では、I/O へのデー タ ア ク セ ス と メ モ リ へのデー タ ア ク セ スは分離 さ れず、メ モ リ マ ッ プ さ れた I/O が使用 さ れます。 メ モ リ ア ク セ ス には、次の 3 つの イ ン タ ーフ ェ イ ス を使用で き ます。 • ロ ーカル メ モ リ バ ス (LMB) • プ ロ セ ッ サ ローカル バ ス (PLB) ま たは オンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB) • ザ イ リ ン ク ス CacheLink (XCL) LMB メ モ リ ア ド レ ス範囲は、 PLB、 OPB、 ま たは XCL のア ド レ ス範囲 と 重な ら ない よ う にす る必 要があ り ます。 MicroBlaze では、 ローカル メ モ リ (LMB) へのア ク セ スお よ びキ ャ ッ シ ュ の読み出 し の レ イ テ ン シは 1 ク ロ ッ ク サ イ ク ルです。 ただ し 、 C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合の デー タ 側ア ク セ スお よ びデー タ キ ャ ッ シ ュ の読み出 し は 2 ク ロ ッ ク サ イ ク ルです。 デー タ キ ャ ッ シ ュ 書 き 込みレ イ テ ン シは C_DCACHE_USE_WRITEBACK で決ま り ます。 C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る 場合、 書き 込みレ イ テ ン シは通常 1 サ イ ク ルです ( キ ャ ッ シ ュ が メ モ リ にア ク セ スする 必要があ る 場合はレ イ テ ン シはそれ以上 )。 C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れてい る 場合、 書き 込みレ イ テ ン シは通常 2 サ イ ク ルです ( ポ ス テ ッ ド 書き 込みバ ッ フ ァ が フルの場合は、 レ イ テ ン シはそれ以上 )。 MicroBlaze の命令お よ びデー タ キ ャ ッ シ ュ では、 4 ワー ド ま たは 8 ワー ド のキ ャ ッ シ ュ ラ イ ン を 使用で き ます。 キ ャ ッ シ ュ ラ イ ン を長 く する 場合はバ イ ト 長 も 増やす と 、通常シーケ ン シ ャ ル ア ク セ ス パ タ ーンの ソ フ ト ウ ェ アのパフ ォーマン ス が向上 し ます。 ラ ン ダ ム ア ク セ ス パ タ ーンの ソ フ ト ウ ェ アでは、キ ャ ッ シ ュ サ イ ズに よ っ てはパフ ォーマン ス が低下す る こ と があ り ます。 こ れは、使 用可能なキ ャ ッ シ ュ ラ イ ンが少な く な り 、 キ ャ ッ シ ュ の ヒ ッ ト 率が下が る ためです。 各 メ モ リ イ ン ターフ ェ イ ス の詳細は、第 2 章 「MicroBlaze の信号 イ ン タ ーフ ェ イ ス」 を参照 し て く だ さ い。 54 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 特権命令 特権命令 次の命令は、 特権命令です。 • GET、 PUT、 NGET、 NPUT、 CGET、 CPUT、 NCGET、 NCPUT • WIC、 WDC • MTS • MSRCLR、 MSRSET (C ビ ッ ト のみが影響を受け る場合を除 く ) • BRK • RTID、 RTBD、 RTED • BRKI (物理ア ド レ ス 0x8 ま たは 0x18 にジ ャ ンプする 場合を除 く ) ユーザー モー ド で こ れ ら の命令を使用す る と 、 特権命令例外が発生 し ます。 次のいずれかでユーザー モー ド お よび仮想モー ド か ら 特権モー ド に切 り 替わ り ます。 1. ハー ド ウ ェ ア生成 さ れた リ セ ッ ト (デバ ッ グ リ セ ッ ト を含む) 2. ハー ド ウ ェ ア例外 3. マ ス ク 不可のブ レー ク ま たはハー ド ウ ェ ア ブ レー ク 4. 割 り 込み 5. 命令 「BRALID Re, 0x8」 を実行 し 、 ユーザー ベ ク タ 例外を発生 さ せ る 6. ソ フ ト ウ ェ ア ブ レー ク 命令 BRKI を実行 し 、 物理ア ド レ ス 0x8 ま たは 0x18 にジ ャ ンプす る ハー ド ウ ェ ア生成 さ れた リ セ ッ ト 以外では、 ユーザー モー ド お よ び仮想モー ド の ス テー タ ス は、 MSR の UMS ビ ッ ト お よ び VMS ビ ッ ト に保存 さ れます。 アプ リ ケーシ ョ ン (ユーザー モー ド ) プ ロ グ ラ ムでは、 BRALID 命令ま たは BRKI 命令を使用 し て 物理ア ド レ ス 0x8 にジ ャ ンプ し 、制御を シ ス テ ム サービ ス ルーチン (特権モー ド プ ロ グ ラ ム ) に転 送 し ます。 こ の命令を実行す る と 、 シ ス テ ム呼び出 し 例外が発生 し ます。 例外ハン ド ラ で、 ど のシ ス テ ム サービ ス ルーチン を呼び出すかお よ び呼び出 し 側のアプ リ ケーシ ョ ンにそのサービ ス を呼び 出す権限があ る かが確認 さ れます。 権限があ る場合は、 アプ リ ケーシ ョ ン プ ロ グ ラ ムに代わ り 、 例 外ハン ド ラ でシ ス テ ム サービ ス ルーチンへのプ ロ シージ ャ 呼び出 し が実行 さ れます。 シ ス テ ム サービ ス ルーチンに必要な実行環境の設定には、 プ ロ ロ ーグ命令を実行す る必要があ り ます。 こ れ ら の命令を実行す る と 通常、 プ ロ シージ ャ の情報 ( ア ク テ ィ ブ化の記録) を保持す る ス ト レージのブ ロ ッ ク が作成 さ れ、ポ イ ン タ がア ッ プデー ト お よ び初期化 さ れ、 シ ス テ ム サービ ス ルー チンで使用 さ れ る 揮発性レ ジ ス タ が保存 さ れます。 プ ロ ロ ーグ コー ド は実行モジ ュール作成時に リ ン カに よ っ て挿入で き ます。シ ス テ ム呼び出 し 割 り 込みハン ド ラ ま たはシ ス テ ム ラ イ ブ ラ リ ルーチ ンの ど ち ら かに、 ス タ ブ コ ー ド と し て含め る こ と も で き ます。 シ ス テ ムサービ ス ルーチンか ら 戻 る と 、 上記の手順で実行 さ れた内容が無効にな り ます。 エ ピ ロ ー グ コ ー ド を実行す る と 、 ア ク テ ィ ブ化の記録が巻 き 戻 し お よ び解放 さ れ、、 ポ イ ン タ が復元 さ れ、揮 発性レ ジ ス タ が復元 さ れます。 割 り 込みハン ド ラ では、 例外命令 (RTED) か ら アプ リ ケーシ ョ ンへ の戻 り が実行 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 55 第 1 章 : MicroBlaze アーキテ ク チ ャ 仮想 メ モ リ 管理 MicroBlaze で実行 さ れ る プ ロ グ ラ ムでは、有効ア ド レ ス を使用 し て 4GB の フ ラ ッ ト ア ド レ ス空間 にア ク セ ス し ます。 プ ロ セ ッ サでは、 変換モー ド に応 じ て次の方法で こ のア ド レ ス空間に割 り 込み ます。 • 実モー ド : 有効なア ド レ ス を使用 し て物理 メ モ リ に直接ア ク セ ス • 仮想モー ド : 有効なア ド レ スは、 プ ロ セ ッ サの仮想 メ モ リ 管理ハー ド ウ ェ アに よ り 物理ア ド レ ス に変換 さ れ る 仮想 メ モ リ モー ド では、シ ス テ ム ソ フ ト ウ ェ アでプ ロ グ ラ ムお よ びデー タ を物理ア ド レ ス空間の ど の位置にで も 再配置で き ます。 ア ク テ ィ ブなプ ロ グ ラ ムお よ びデー タ に領域が必要な場合は、 シ ス テ ム ソ フ ト ウ ェ アでア ク テ ィ ブでないプ ロ グ ラ ムお よびデー タ を物理 メ モ リ か ら 移動 し ます。 再配置す る と 、 シ ス テ ムが実際に イ ンプ リ メ ン ト す る よ り も 多 く の メ モ リ を プ ロ グ ラ ムで使用で き る よ う にな り 、 シ ス テ ムの物理 メ モ リ の制限がな く な り ます。 ま た、 ど の物理 メ モ リ ア ド レ ス がほ かの ソ フ ト ウ ェ ア プ ロ セ スやハー ド ウ ェ ア デバ イ ス に割 り 当て ら れてい る かを知 る 必要 も な く な り ます。 プ ロ グ ラ ムで使用で き る ア ド レ スは、 プ ロ セ ッ サで物理ア ド レ ス に変換 さ れます。 仮想モー ド では、メ モ リ 保護を詳細に制御で き ます。 1KB 程度の小 さ な メ モ リ ブ ロ ッ ク で も 個別に 不正ア ク セ ス か ら 保護で き ます。 保護お よ び再配置の機能に よ り 、 シ ス テ ム ソ フ ト ウ ェ アでマルチ タ ス ク がサポー ト さ れます。 マルチ タ ス ク では、 複数のプ ロ グ ラ ムが同時に実行 さ れます。 MicroBlaze では、 仮想モー ド は MMU (Memory Management Unit) に よ り イ ンプ リ メ ン ト さ れま す。MMU は C_USE_MMU が 3 お よび C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合に有効 です。 MMU では、有効ア ド レ ス か ら 物理ア ド レ スへの対応付けが制御 さ れ、メ モ リ 保護がサポー ト さ れます。 こ れ ら の機能を使用す る と 、 仮想 メ モ リ のデマン ド ページ ン グお よ びその他の メ モ リ 管 理ス キーマ を シ ス テ ム ソ フ ト ウ ェ アで イ ンプ リ メ ン ト で き る よ う にな り ます。 MicroBlaze の MMU イ ンプ リ メ ン テーシ ョ ンは、 PowerPC™ 405 に基づいてい ます。 詳細は、 『PowerPC Processor Reference Guide』 を参照 し て く だ さ い。 MMU の機能の概要は次の と お り です。 • 有効ア ド レ ス を物理ア ド レ スへ変換 • ア ド レ ス変換中の、 ページ レベルでのア ク セ ス の制御 • ゾーン を使用 し た、 仮想モー ド に よ る保護制御 • 命令ア ド レ スお よ びデー タ ア ド レ ス変換お よび保護の個別の制御 • 1KB、 4KB、 16KB、 64KB、 256KB、 1MB、 4MB、 お よ び 16MB の 8 と お り のページ サ イ ズ のサポー ト 。 シ ス テ ム ソ フ ト ウ ェ アでは、 ど のページ サ イ ズの組み合わせ も 使用可能です。 • ソ フ ト ウ ェ アに よ る ページ置 き 換えの制御 実モー ド プ ロ セ ッ サは、 命令を フ ェ ッ チす る場合お よ び読み込みま たは格納命令でデー タ にア ク セ スす る場 合に メ モ リ を参照 し ます。 プ ロ グ ラ ムでは、プ ロ セ ッ サ よ り 算出 さ れた 32 ビ ッ ト の有効ア ド レ ス を 使用 し て メ モ リ 位置を参照 し ます。 実モー ド が イ ネーブルの場合は、 物理ア ド レ スは有効ア ド レ ス に等 し く 、プ ロ セ ッ サで物理 メ モ リ へのア ク セ ス に使用 さ れます。 プ ロ セ ッ サは、 リ セ ッ ト さ れ る と 実モー ド で動作 し ます。 実モー ド は、 MSR の VM ビ ッ ト を 0 に し て も 、 イ ネーブルにな り ます。 物理 メ モ リ デー タ ア ク セ ス (読み込みお よ び格納) は、 有効ア ド レ ス を使用 し て実モー ド で実行 さ れます。 実モー ド では、 シ ス テ ム ソ フ ト ウ ェ アで仮想ア ド レ ス変換を使用で き ませんが、 メ モ リ ア ク セ ス の完全な保護は、C_USE_MMU > 1 お よ び C_AREA_OPTIMIZED = 0 の場合に イ ンプ リ メ 56 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 仮想 メ モ リ 管理 ン ト さ れます。 実モー ド の メ モ リ 管理の イ ンプ リ メ ン テーシ ョ ンは、仮想モー ド よ り も 容易です。 単 純なエンベデ ッ ド 環境で、 ア ク セ ス保護が必要で仮想ア ド レ ス変換が必要でない場合は、 実モー ド の使用が適 し ています。 仮想モー ド 仮想モー ド では、図 1-16 に示 さ れ る 手順で、プ ロ セ ッ サで有効ア ド レ ス が物理ア ド レ ス に変換 さ れ ます。 仮想モー ド は、 MSR の VM ビ ッ ト を 1 に し て も 、 イ ネーブルにな り ます。 0 24 31 Process ID Register PID 0 n 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 図 1-16 : 仮想モー ド のア ド レ ス変換 図 1-16 の各ア ド レ ス には、ページ番号フ ィ ール ド お よ びオ フ セ ッ ト フ ィ ール ド が含まれてい ます。 ページ番号は、MMU で変換 さ れた ア ド レ ス の一部です。 オ フ セ ッ ト は ページへのバ イ ト オ フ セ ッ ト で、MMU で変換 さ れた も のではあ り ません。 仮想ア ド レ スは、PID レ ジ ス タ に含まれ る プ ロ セ ス ID (PID) と い う フ ィ ール ド で構成 さ れてい ます (37 ページの 「プ ロ セ ス識別レ ジ ス タ (PID)」 を参 照)。 PID と 有効ページ番号 (EPN) を組み合わせて、仮想ページ番号 (VPN) と 呼びます。 こ の値は、 表 1-34 に示す よ う に、 ページ サ イ ズで決ま り ます。 シ ス テ ム ソ フ ト ウ ェ アでは、 各仮想ページ を物理ページに変換す る際に使用 さ れ る エン ト リ を含 む、 ページ変換テーブルが維持 さ れます。 ページ変換エン ト リ に よ っ て定義 さ れ るページ サ イ ズに よ り 、 ページ番号フ ィ ール ド お よ びオ フ セ ッ ト フ ィ ール ド のサ イ ズが決ま り ます。 ページサ イ ズが 4KB の場合、 ページ番号フ ィ ール ド は 20 ビ ッ ト 、 オ フ セ ッ ト フ ィ ール ド は 12 ビ ッ ト にな り ます。 こ の場合、 VPN は 28 ビ ッ ト にな り ます。 最 も 頻繁に使用 さ れ る ページ変換は、TLB (Translation Look-Aside Buffer) に格納 さ れます。 仮想ア ド レ ス の変換時に MMU で、一致す る VPN (PID お よ び EPN) のページ変換エン ト リ が確認 さ れま す。 表のエン ト リ すべてではな く 、プ ロ セ ッ サ TLB に含まれ る エン ト リ のみが確認 さ れます。 VPN が一致す る ページ変換エン ト リ が検出 さ れ る と 、 対応す る物理ページ番号がエン ト リ か ら 読み出 さ MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 57 第 1 章 : MicroBlaze アーキテ ク チ ャ れ、オ フ セ ッ ト と 組み合わせて 32 ビ ッ ト 物理ア ド レ ス が構成 さ れます。 プ ロ セ ッ サでは こ の物理ア ド レ ス を使用 し て、 メ モ リ を参照 し ます。 シ ス テ ム ソ フ ト ウ ェ アでは PID を使用 し て、プ ロ セ ッ サで実行 さ れてい る ソ フ ト ウ ェ ア プ ロ セ ス ( タ ス ク 、 サブルーチン、 ス レ ッ ド ) を識別 し ます。 個別に コ ンパ イ ル さ れた複数のプ ロ セ ッ サが、 重 な っ た有効ア ド レ ス領域で動作す る こ と があ り ますが、 マルチ タ ス ク がサポー ト さ れてい る 場合は シ ス テ ム ソ フ ト ウ ェ アで領域が重な ら ない よ う にす る必要があ り ます。 各プ ロ セ ス に PID を割 り 当て る と 、 シ ス テ ム ソ フ ト ウ ェ アで各プ ロ セ ス を、 仮想ア ド レ ス空間が重な ら ない領域に再配置で き る よ う にな り ます。 仮想ア ド レ ス空間を対応付け る と 、 各プ ロ セ ス を個別に物理ア ド レ ス空間に 変換で き る よ う にな り ます。 ページ変換テーブル ページ変換テーブルは ソ フ ト ウ ェ アで定義お よ び管理 さ れたデー タ 構造で、 ページ変換に必要な情 報を含んでいます。 ソ フ ト ウ ェ アで管理 さ れ るページ変換の要件は、エンベデ ッ ド シ ス テ ム アプ リ ケーシ ョ ンが タ ーゲ ッ ト と す る アーキ テ ク チ ャ の ト レー ド オ フ を表 し ます。 エンベデ ッ ド シ ス テ ム では動作環境が厳密に制御 さ れ、 アプ リ ケーシ ョ ン ソ フ ト ウ ェ アのセ ッ ト が詳細に定義 さ れてい ま す。 こ の環境では、 次の方法で仮想 メ モ リ 管理が各エンベデ ッ ド シ ス テ ム用に最適化 さ れます。 • ページ変換テーブルは、 ページ変換エン ト リ の検索効率が上が る よ う に構成す る こ と がで き ま す。 ほ と ん ど の汎用プ ロ セ ッ サでは、 イ ンデ ッ ク ス付 き の表 (単純な検索方法、 表サ イ ズ大) ま たはハ ッ シ ュ テーブル (複雑な検索方法、 表サ イ ズ小) のいずれかが イ ンプ リ メ ン ト さ れます。 ソ フ ト ウ ェ アでの検索では、 エンベデ ッ ド シ ス テ ムに適 し た構成を組み合わせて使用で き ま す。 ページ テーブルのサ イ ズ と ア ク セ ス時間はど ち ら も 最適化可能です。 • アプ リ ケーシ ョ ン モジ ュール、 デバ イ ス ド ラ イ バ、 シ ス テ ム サービ ス ルーチン、 お よ びデー タ に個別のページ サ イ ズ を使用で き ます。 個別のページ サ イ ズ を使用す る と メ モ リ の フ ラ グ メ ン テーシ ョ ンが削減 さ れ、 シ ス テ ム ソ フ ト ウ ェ アで メ モ リ が効率的に使用 さ れます。 サ イ ズ の大 き なデー タ 構造を 16MB のページに、小型の I/O デバ イ ス ド ラ イ バを 1KB のページに割 り 当て る と い う よ う な例が考え ら れます。 • ページの置 き 換えは、 ページ変換の ミ ス を最小限に抑え る よ う に調整で き ます。 次に説明す る よ う に、 最 も 頻繁に使用 さ れ るページ変換は、 TLB (Translation Look-Aside Buffer) に格納 さ れます。 ど の変換を TLB に格納 し 、新 し い変換が必要にな っ た場合に ど の変換を置 き換え る か は、 ソ フ ト ウ ェ アで決定 さ れます。 置 き換え手法は、 ページ変換エン ト リ が常に TLB に格納 さ れた り 削除 さ れた り す る ス ラ ッ シ ュ が発生 し ない よ う に調整で き ます。 ま た、 重要なページ変 換が置 き 換え ら れない よ う に (ページ ロ ッ ク ) 調整で き ます。 ソ フ ト ウ ェ アで管理 さ れ る 統合 64 エン ト リ TLB は、 MMU でア ク セ ス さ れ る命令お よ びデー タ ページ変換エン ト リ のサブセ ッ ト を キ ャ ッ シ ュ し ます。 ソ フ ト ウ ェ アでシ ス テ ム メ モ リ にあ るペー ジ変換テーブルか ら エン ト リ を読み出 し て TLB に格納 し ます。 次に、 統合 TLB を詳細に説明 し ま す。 内部的には、 MMU には命令お よ びデー タ (サ イ ズはそれぞれ C_MMU_ITLB_SIZE お よ び C_MMU_DTLB_SIZE で設定可) のシ ャ ド ウ TLB も 含まれます。 こ れ ら のシ ャ ド ウ TLB はすべてプ ロ セ ッ サで管理 さ れ ( ソ フ ト ウ ェ アには透過的)、統合 TLB と の ア ク セ ス競合を最小限に抑え る ために使用 さ れます。 58 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 仮想 メ モ リ 管理 変換ル ッ ク アサイ ド バ ッ フ ァ (TLB) TLB (Translation Look-Aside Buffer) は MicroBlaze MMU で、 ア ド レ ス変換 (プ ロ セ ッ サが仮想 モー ド で実行 し てい る 場合)、メ モ リ 保護、お よ び格納制御に使用 さ れます。 TLB の各エン ト リ には、 仮想ページ (PID と 有効ページ番号) の識別、物理ページへの変換の指定、ページの保護特性の決定、 お よ びページに関連付け ら れた格納属性の指定のために必要な情報が含まれてい ます。 MicroBlaze の TLB は、 次の 3 つの独立 し た TLB と し て物理的に イ ンプ リ メ ン ト さ れます。 • UTLB (統合 TLB) : 64 個のエン ト リ を含み、擬似連想です。 命令ページお よ びデー タ ページ変 換は、任意の UTLB エン ト リ に格納で き ます。 UTLB の初期化お よ び管理はすべて ソ フ ト ウ ェ アで制御 さ れます。 • ITLB (命令シ ャ ド ウ TLB) : 命令ページ変換エン ト リ を含み、 完全に連想です。 ITLB に格納 さ れたページ変換エン ト リ は、 UTLB で最後にア ク セ ス さ れた命令ページ変換です。 ITLB は命 令変換 と UTLB のア ッ プデー ト 操作の競合を最小限に抑え る ために使用 さ れます。 ITLB の初 期化お よ び管理はすべてハー ド ウ エアで制御 さ れ、 ソ フ ト ウ ェ アには透過的です。 • DTLB (データ シ ャ ド ウ TLB) : データ ページ 変換エン ト リ を 含み、 完全に連想です。 DTLB に格納さ れた ページ 変換エン ト リ は、UTLB で最後にア ク セス さ れた データ ページ 変換です。 DTLB はデータ 変換と UTLB のア ッ プデート 操作の競合を 最小限に抑え る た めに使用さ れ ま す。 DTLB の初期化およ び管理はすべて ハード ウ エア で制御さ れ、ソ フ ト ウ ェ ア には透過的 です。 図 1-17 に TLB の変換フ ロ ーを示 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 59 第 1 章 : MicroBlaze アーキテ ク チ ャ デー タ 側 有効ア ド レ スの生成 命令側 有効ア ド レ スの生成 変換はデ ィ ス エーブル (MSR[VM]=0) 変換は イ ネーブル (MSR[VM]=1) ITLB ミ ス ITLE よ り 実ア ド レ ス取得 (MSR[VM]=0) 変換な し ルッ クア ッ プ ルッ クアッ プ ITLB ヒ ッ ト 変換はデ ィ ス エーブル (MSR[VM]=1) DTLB ITLB 変換な し 変換はイ ネーブル DTLB ミ ス DTLB ヒ ッ ト DTLB よ り 実ア ド レ ス取得 UTLB ルッ クアップ UTLB ヒ ッ ト UTLB ミ ス 命令キ ャ ッ シ ュへ ア ク セス 命令ま たは デー タ キ ャ ッ シ ュへ ア ク セス UTLB よ り 実ア ド レ ス取得 命令側 TLB ミ ス ま たは デー タ 側 TLB ミ ス 例外 ア ド レスを ア ド レスを ITLB に転送 DTLB に転送 図 1-17 : TLB ア ド レ ス変換フ ロー 60 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 仮想 メ モ リ 管理 TLB エ ン ト リ のフ ォ ーマ ッ ト 図 1-18 に、 TLB エン ト リ のフ ォ ーマッ ト を 示し ま す。 各 TLB エン ト リ は 68 ビ ッ ト で、 TLBLO ( データ エン ト リ ) と TLBHI (タ グ エン ト リ ) の 2 つの部分で構成さ れま す。 TLBLO : 0 22 23 24 28 29 30 31 ↑ ↑ ↑ ↑ RPN EX WR ZSEL ↑ ↑ ↑ ↑ W I M G TLBHI : 0 22 25 26 27 28 ↑ ↑ TAG SIZE 35 ↑ ↑ ↑ ↑ V TID E U0 図 1-18 : TLB エ ン ト リ のフ ォ ーマ ッ ト TLB エン ト リ の内容は、 39 ページの表 1-18 お よ び 42 ページの表 1-19 に示 さ れてい ます。 TLB エン ト リ 内の フ ィ ール ド は次の よ う に分類 さ れます。 • 仮想ページ識別 (TAG、 SIZE、 V、 TID) : ページ変換エン ト リ を識別 し ます。 変換処理中に仮想 ページ番号 と 比較 さ れます。 • 物理ページ識別 (RPN、 SIZE) : 物理 メ モ リ 内にあ る 変換 さ れたページ を識別 し ます。 • ア ク セ ス制御 (EX、 WR、 ZSEL) : ページで許可 さ れてい る ア ク セ ス の タ イ プを指定 し 、不正ア ク セ ス か ら ページ を保護す る ために使用 し ます。 • 格納属性 (W、 I、 M、 G、 E、 U0) : デー タ キ ャ ッ シ ュ のキ ャ ッ シ ュ ポ リ シー ( ラ イ ト バ ッ ク や ラ イ ト ス ルー ) に従っ てい る か ど う か、 ページがキ ャ ッ シ ュ可能か ど う か、 バ イ ト 順 ( エンデ ィ ア ン ) な ど の格納制御属性を指定 し ます。 表 1-34 に、TLB エン ト リ の SIZE フ ィ ール ド と 変換 さ れたページのサ イ ズの関係を示 し ます。 タ グ 比較で使用 さ れ る ア ド レ ス ビ ッ ト と 物理ア ド レ ス に使用 さ れ る物理ページ番号の ビ ッ ト も ページ サ イ ズ別に示 さ れてい ます。 表 1-34 : ページ サイ ズによ るページ変換ビ ッ ト 範囲 ページ サイ ズ TLBHI の SIZE TAG 比較のビ ッ ト 範囲 フ ィ ールド ページ オフセ ッ ト 物理ページ番号 0 にする RPN ビッ ト 1KB 000 TAG[0:21]、 ア ド レ ス [0:21] ア ド レ ス [22:31] RPN[0:21] 4KB 001 TAG[0:19]、 ア ド レ ス [0:19] ア ド レ ス [20:31] RPN[0:19] 20:21 16KB 010 TAG[0:17]、 ア ド レ ス [0:17] ア ド レ ス [18:31] RPN[0:17] 18:21 64KB 011 TAG[0:15]、 ア ド レ ス [0:15] ア ド レ ス [16:31] RPN[0:15] 16:21 256KB 100 TAG[0:13]、 ア ド レ ス [0:13] ア ド レ ス [14:31] RPN[0:13] 14:21 1MB 101 TAG[0:11]、 ア ド レ ス [0:11] ア ド レ ス [12:31] RPN[0:11] 12:21 4MB 110 TAG[0:9]、 ア ド レ ス [0:9] ア ド レ ス [10:31] RPN[0:9] 10:21 16MB 111 TAG[0:7]、 ア ド レ ス [0:7] ア ド レ ス [8:31] RPN[0:7] 8:21 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com - 61 第 1 章 : MicroBlaze アーキテ ク チ ャ TLB ア ク セス MMU で仮想ア ド レ ス (PID と 有効ア ド レ ス の組み合わせ) が物理ア ド レ ス に変換 さ れ る場合、最初 に、適切なページ変換エン ト リ のシ ャ ド ウ TLB があ る かが確認 さ れます。 エン ト リ が検出 さ れた場 合は、 物理 メ モ リ のア ク セ ス に使用 さ れます。 検出 さ れない場合は、 UTLB にエン ト リ があ る かが MMU で確認 さ れます。 シ ャ ド ウ TLB ミ ス のために UTLB にア ク セ スす る と 、 その都度遅延が生 じ ます。 ミ ス の レ イ テ ン シは、2 ~ 32 周期です。 DTLB と ITLB が同時に UTLB にア ク セ ス し た場 合は、 DTLB が優先 し ます。 63 ページの図 1-19 には、 シ ャ ド ウ TLB のいずれか ま たは UTLB にページ変換エン ト リ が存在す る かを確認す る ために MMU で実行 さ れ る論理プ ロ セ ス が示 さ れています。 TLB の有効なエン ト リ はすべてチ ェ ッ ク さ れます。 TLB エン ト リ で次の条件がすべて満た さ れ る と 、 TLB ヒ ッ ト が発生 し ます。 • エン ト リ が有効であ る • エン ト リ の TAG フ ィ ール ド が、 エン ト リ の SIZE フ ィ ール ド で制御 さ れ る 有効ア ド レ ス の EPN に一致す る • エン ト リ の TID が PID に一致す る 上記の どれか 1 つで も 満た さ れない場合は、 TLB ミ ス が発生 し ます。 TLB ミ ス が発生す る と 、次の 例外が発生 し ます。 TID 値が 0x00 の場合、 TID と PID の比較が MMU で無視 さ れ、 TAG と EA[EPN] のみが比較 さ れます。 TLB エン ト リ の TID 値が 0x00 の場合は変換がプ ロ セ ス か ら 独立 し てい る ため、すべての プ ロ セ ス がグ ロ ーバルにア ク セ スす る ページに こ の TID 値を割 り 当て ます。 PID 値が 0x00 の場合 は、 任意のページにア ク セ ス で き る プ ロ セ ス が識別 さ れず、 ページ変換 ヒ ッ ト は TID=0x00 の場合 にのみ発生 し ます。 ソ フ ト ウ ェ アでは、 EA[EPN] と PID の組み合わせが一致す る TLB のエン ト リ を複数読み込む こ と がで き ますが、 こ れはプ ロ グ ラ ムのエ ラ ー と 解釈 さ れ、 定義 さ れない ビヘ イ ビ ア を引 き 起 こ し ます。 ヒ ッ ト が発生す る と MMU で、 対応す る TLB エン ト リ か ら RPN フ ィ ール ド が読み込まれます。 フ ィ ール ド のビ ッ ト は、SIZE フ ィ ール ド の値に応 じ て、一部ま たは全部が使用 さ れます (表 1-34 を 参照) 。 SIZE フ ィ ール ド でページ サ イ ズが 256KB に指定 さ れてい る 場合は、 RPN[0:13] は物理 ページ番号を表 し 、物理ア ド レ ス を構成 し ます。 RPN[14:21] は使用 さ れず、TLB エン ト リ の初期化 の際に、 ソ フ ト ウ ェ アで 0 に設定 さ れ る必要があ り ます。 物理ア ド レ ス の残 り の ビ ッ ト には、 EA の ページ オフ セ ッ ト 部を使用 し ます。 ページ サ イ ズが 256KB の場合、 RPN[0:13] を有効ア ド レ ス の 14 ~ 31 ビ ッ ト と 結合 し 、 32 ビ ッ ト 物理ア ド レ ス を構成 し ます。 物理 メ モ リ にア ク セ スす る前に、 MMU で TLB エン ト リ のア ク セ ス制御フ ィ ール ド が確認 さ れま す。 こ れ ら の フ ィ ール ド は、 要求 さ れた メ モ リ のア ク セ ス が実行中のプ ロ グ ラ ムに許可 さ れてい る か ど う かを示 し ます。 ア ク セ ス が許可 さ れていれば、ページへのア ク セ ス方法を決定す る ために、MMU で格納属性フ ィ ー ル ド がチ ェ ッ ク さ れます。 格納属性フ ィ ール ド では、 メ モ リ ア ク セ ス のキ ャ ッ シ ュ 方法が指定 さ れ てい ます。 62 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 仮想 メ モ リ 管理 TLB ア ク セス エ ラ ー TLB ア ク セ ス エ ラ ーが発生する と 、 例外が発生 し ます。 こ の場合、 エ ラ ーの原因 と な る命令に割 り 込みが発生 し 、 エ ラ ーを解決す る ために制御が割 り 込みハン ド ラ に渡 さ れます。 TLB ア ク セ ス のエ ラ ーの原因には次の 2 つがあ り ます。 • 一致す る TLB エン ト リ が検出 さ れず、 TLB ミ ス が発生 し た場合 • 一致す る TLB エン ト リ は検出 さ れたが、 ページへのア ク セ ス が格納属性かゾーン保護のいず れかで禁止 さ れてい る 場合 割 り 込みが発生す る と 、 MSR[VM] が 0 にな り 、 プ ロ セ ッ サは実モー ド にな り ます。 実モー ド では、 MMU で実行 さ れ る すべてのア ド レ ス変換お よ び メ モ リ 保護チ ェ ッ ク がデ ィ ス エーブルにな り ま す。 UTLB は、シ ス テ ム ソ フ ト ウ ェ アに よ り ページ変換エン ト リ で初期化 さ れ る と 、通常は、実モー ド で実行 し てい る 割 り 込みハン ド ラ を使用 し て管理 さ れます。 図 1-19 に、 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 図 1-19 : TLB エ ン ト リ 確認の一般的な手順 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 63 第 1 章 : MicroBlaze アーキテ ク チ ャ 次に、 TLB ア ク セ ス エ ラ ーのために例外が発生す る 条件を示 し ます。 デー タ 格納例外 仮想モー ド が イ ネーブル (MSR[VM]=1) で、ページへのア ク セ ス が次の理由のいずれかで許可 さ れ ない場合、 デー タ 格納例外が発生 し ます。 • ユーザー モー ド の場合 ♦ TLB エン ト リ で、ページへのア ク セ ス を禁 じ る ゾーン フ ィ ール ド (ZPR[Zn]=00) が指定 さ れてい る 。 こ れは読み込み命令お よ び格納命令の場合です。 ♦ TLB エン ト リ で、読み込み専用のページ (TLBLO[WR]=0) が指定 さ れてい る。読み込み専 用でない場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 11) では無効に さ れません。 こ れは格納命 令の場合です。 • 特権モー ド の場合 ♦ TLB エン ト リ で、読み込み専用のページ (TLBLO[WR]=0) が指定 さ れてい る。読み込み専 用でない場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 10 お よ び ZPR[Zn], 11) では無効に さ れま せん。 こ れは格納命令の場合です。 命令格納例外 仮想モー ド が イ ネーブル (MSR[VM]=1) で、ページへのア ク セ ス が次の理由のいずれかで許可 さ れ ない場合、 命令格納例外が発生 し ます。 • ユーザー モー ド の場合 ♦ TLB エン ト リ で、ページへのア ク セ ス を禁 じ る ゾーン フ ィ ール ド (ZPR[Zn]=00) が指定 さ れてい る 。 ♦ TLB エン ト リ で、実行不可のページ (TLBLO[EX]=0) が指定 さ れてい る。実行不可でない 場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 11) では無効に さ れません。 ♦ TLB エン ト リ で、 保護 さ れたページ (TLBLO[G]=1) が指定 さ れてい る 。 • 特権モー ド の場合 ♦ TLB エン ト リ で、実行不可のページ (TLBLO[EX]=0) が指定 さ れてい る。実行不可でない 場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 10 お よ び ZPR[Zn], 11) では無効に さ れません。 ♦ TLB エン ト リ で、 保護 さ れたページ (TLBLO[G]=1) が指定 さ れてい る 。 デー タ TLB ミ ス例外 仮想モー ド が イ ネーブル (MSR[VM]=1) で、 一致す る有効な TLB エン ト リ が TLB ( シ ャ ド ウ お よ び UTLB) に存在 し ない場合、 読み込み命令ま たは格納命令でデー タ TLB ミ ス例外が発生 し ます。 命令 TLB ミ ス例外 仮想モー ド が イ ネーブル (MSR[VM]=1) で、 一致す る有効な TLB エン ト リ が TLB ( シ ャ ド ウ お よ び UTLB) に存在 し ない場合、 命令フ ェ ッ チで命令 TLB ミ ス例外が発生 し ます。 64 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 仮想 メ モ リ 管理 ア ク セス保護 シ ス テ ム ソ フ ト ウ ェ アではア ク セ ス保護を使用 し て、不正ア ク セ ス か ら メ モ リ ロ ケーシ ョ ン を保護 し ます。 ユーザー モー ド と 特権モー ド の両方で、 メ モ リ への読み出 し 、 書 き込み、 命令フ ェ ッ チの ア ク セ ス が制限 さ れます。 ア ク セ ス保護は、 仮想保護モー ド が イ ネーブルの場合に使用で き ます。 仮想ページの TLB エン ト リ では、 ページで許可 さ れてい る ア ク セ ス の種類が指定 さ れます。 ま た TLB エン ト リ では、 TLB エン ト リ で指定 さ れた ア ク セ ス制御を無効にす る ゾーン保護レ ジ ス タ の ゾーン保護フ ィ ール ド も 指定 さ れます。 TLB に よ る ア ク セス保護の制御 各 TLB エン ト リ では、 次の 3 つのア ク セ ス が制御 さ れます。 • プ ロ セ ス : 各プ ロ セ ス には重複 し ないプ ロ セ ス ID (PID) が割 り 当て ら れてお り 、 こ れを不正ア ク セ ス か ら の保護に使用 し ます。 シ ス テ ム ソ フ ト ウ ェ アでユーザー モー ド のアプ リ ケーシ ョ ンが起動す る 際に、 アプ リ ケーシ ョ ンの PID が PID レ ジ ス タ に読み込まれます。 アプ リ ケー シ ョ ンの実行時に、TLBHI (Translation Look-Aside Buffer High ) の TID フ ィ ール ド が PID と 一致す る TLB エン ト リ のみを使用 し て メ モ リ ア ド レ ス が変換 さ れ る ため、 仮想 メ モ リ の特定 の領域へのアプ リ ケーシ ョ ンのア ク セ ス が、 シ ス テ ム ソ フ ト ウ ェ アに よ り 制限 さ れます。 TLB エン ト リ の TID 値が 0x00 の場合は変換がプ ロ セ ス か ら 独立 し てい る ため、すべてのプ ロ セ ス がグ ロ ーバルにア ク セ スす る ページに こ の TID 値を割 り 当て ます。 • 実行 : プ ロ セ ッ サでは、 実行可能 (TLBLO[EX]=1) であ る仮想ページか ら フ ェ ッ チ さ れた命令 のみが実行 さ れます。 TLBLO[EX] = 0 の場合命令がページか ら フ ェ ッ チ さ れず、命令格納割 り 込み (ISI) が発生 し ます。 ISI は命令の フ ェ ッ チ時ではな く 、 実行時に発生 し ます。 論理的に フ ェ ッ チ さ れた命令は実行 さ れずに破棄 さ れため、 ISI は発生 し ません。 ゾーン保護レ ジ ス タ を使用 し て、 実行保護を無効にで き ます。 • 読み出 し /書 き 込み : デー タ は、 書 き込み可 (TLBLO[WR]=1) の仮想ページにのみ書 き 込まれ ます。 TLBLO[WR] = 0 の場合ページは読み込み専用で、 書 き込みを試み る と デー タ 格納割 り 込み (DSI) が発生 し ます。 ゾーン保護レ ジ ス タ を使用 し て、 書 き込み保護を無効にで き ます。 TLB エ ン ト リ を 使用し て プロ グ ラ ム で の ページ の 読み込みを 禁止する こ と はで き ま せん 。 仮 想モード で は、 ゾ ーン 保護はページ の 読み出し 保護に 使用さ れま す。 ア ク セ ス 不可ゾ ーン を ZPR[Zn] = 00 に定義す る と 、 TLB エン ト リ ア ク セ ス保護が無効にな り ます。 プ ロ グ ラ ムでのペー ジ読み出 し は、 ユーザー モー ド で実行 し てい る場合にのみ禁止で き ます。 特権モー ド で実行 し てい る プ ロ グ ラ ムには、 常にページの読み出 し ア ク セ ス権があ り ます。 ゾーン保護 ゾーン保護は、 TLB エン ト リ で指定 さ れた ア ク セ ス保護を無効にす る ために使用 さ れます。 ゾーン は、 ア ク セ ス保護設定が同 じ 仮想ページのグループです。 ゾーンには、 任意のページ サ イ ズの組み 合わせで、 任意のページ数を含め る こ と がで き ます。 隣接 し たページ を含め る要件はあ り ません。 ゾーン保護レ ジ ス タ (ZPR) は 32 ビ ッ ト で、最大 16 個の ゾーンに対 し て個別に、無効にす る 保護の 種類を指定 し ます。 ZPR では、 ゾーンの無効指定は 2 ビ ッ ト の フ ィ ール ド と し てエン コ ー ド さ れま す。 TLB エン ト リ の 4 ビ ッ ト のゾーン選択フ ィ ール ド (TLBLO[ZSEL]) では、 16 個の ZPR (Z0 ~ Z15) ゾーン フ ィ ール ド か ら 1 つを指定 し ます。 ZSEL = 0101 と 指定す る と 、 ゾーン Z5 が選択 さ れます。 ZPR の ゾーン フ ィ ール ド を変更す る と 、そのゾーンのすべてのページの保護が変更 さ れます。 ZPR を使用 し ない場合は、 ゾーン内の各ページの変換エン ト リ を個別に変更す る必要があ り ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 65 第 1 章 : MicroBlaze アーキテ ク チ ャ UTLB 管理 UTLB はプ ロ セ ッ サの MMU と メ モ リ 管理 ソ フ ト ウ ェ ア間の イ ン タ ーフ ェ イ ス の役割を果た し ま す。 UTLB はシ ス テ ム ソ フ ト ウ ェ アで管理 さ れ、 仮想ア ド レ ス を物理ア ド レ ス に変換す る 方法を MMU に指示 し ます。 変換エ ラ ーやア ク セ ス違反が原因で問題が発生す る と 、 例外の メ カニ ズ ム を 使用 し て問題が MMU か ら シ ス テ ム ソ フ ト ウ ェ アに送信 さ れます。 MMU で メ モ リ 変換を続行で き る よ う に、 シ ス テ ム ソ フ ト ウ ェ アか ら 問題を解決す る ための割 り 込みハン ド ラ が提供 さ れます。 ソ フ ト ウ ェ アでは UTLB エン ト リ を、 MFS 命令を使用 し て読み出 し 、 MTS 命令を使用 し て書 き込 みます。 こ れ ら の命令では、UTLB の 64 個のエン ト リ の 1 つに対応す る TLBX レ ジ ス タ イ ンデ ッ ク ス (0 ~ 63) が使用 さ れます。 タ グ部分 と デー タ 部分は個別に読み出 し お よ び書 き込み さ れ る た め、エン ト リ に完全にア ク セ スす る には、 ソ フ ト ウ ェ アで MFS 命令ま たは MTS 命令を 2 回実行す る必要があ り ます。 UTLB での変換の検索には、 TLBSX レ ジ ス タ が使用 さ れます。 TLBSX は有効 ア ド レ ス を使用 し て変換を検出 し 、 対応す る UTLB イ ンデ ッ ク ス を TLBX レ ジ ス タ に読み込みま す。 UTLB エン ト リ は、MTS 命令で TLB エン ト リ の タ グ部分の有効ビ ッ ト (TLBHI[V]) が 0 に設定 さ れ、 個別に無効に さ れます。 ページ ア ク セスお よびページ変更の記録 ソ フ ト ウ ェ アでの仮想 メ モ リ の管理では、 次の点を考慮す る必要があ り ます。 • 仮想 メ モ リ 環境では、 物理的に使用可能な メ モ リ よ り も 多 く の メ モ リ が ソ フ ト ウ ェ ア と デー タ で消費 さ れます。 ソ フ ト ウ ェ アお よ びデー タ ページの一部は、使用 さ れない と き にはハー ド ド ラ イ ブな ど物理 メ モ リ 領域の外側に格納 さ れ る必要があ り ます。 頻繁に使用 さ れ るページが物 理 メ モ リ に格納 さ れ、 あ ま り 使用 さ れないページはほかの場所に格納 さ れ る のが理想的です。 • 物理 メ モ リ に格納 さ れてい るページ を新 し いページ を格納す る ために置 き換え る場合、 変更 さ れてい る か ど う かを確認す る必要があ り ます。 変更 さ れてい る場合は、 新 し いページ を読み込 む前に保存す る 必要があ り ます。 変更 さ れていない場合は、 保存す る必要はあ り ません。 • UTLB に保管で き る ページ変換の数には制限があ り ます。 保管 さ れなかっ た変換は、 ページ変 換テーブルに格納 し ます。 UTLB に保管 さ れていない変換を読み込む場合、破棄する UTLB エ ン ト リ を シ ス テ ム ソ フ ト ウ ェ アで決定 し ます。 シ ス テ ム ソ フ ト ウ ェ アでの使用頻度が低い変 換を置 き 換え ます。 こ れ ら を効率 よ く 処理す る には、ページ ア ク セ スお よ びページ変更の履歴を把握す る必要があ り ま す。 MicroBlaze では、 ハー ド ウ ェ アのページ ア ク セ スお よ びページ変更の履歴は記録 さ れません が、 シ ス テ ム ソ フ ト ウ ェ アで TLB ミ ス例外お よ びデー タ 格納例外を使用 し て、こ の情報を収集で き ます。 情報が収集 さ れ る と 、 ページ変換テーブルに対応付け ら れたデー タ 構造に格納 さ れます。 ページ ア ク セ ス情報は、 物理 メ モ リ 領域が必要な場合に、 ど のページ を物理 メ モ リ に保持 し 、 ど の ページ を置 き 換え る かを決定す る ために使用 さ れます。 シ ス テ ム ソ フ ト ウ ェ アでは、TLB エン ト リ の有効ビ ッ ト (TLBHI[V]) を使用 し てページ ア ク セ ス を監視 し ます。 こ のビ ッ ト は、 ページ変換が ア ク セ ス さ れていない こ と を示すために、 無効 (TLBHI[V]=0) に初期化す る必要があ り ます。 最初 にページにア ク セ ス し た と き に、 UTLB エン ト リ が無効であ る か、ページ変換が UTLB に存在 し な いかのいずれかの理由で TLB ミ ス例外が発生 し 、TLB ミ ス ハン ド ラ で UTLB がア ッ プデー ト さ れ て変換が有効 (TLBHI[V]=1) にな り ます。 有効に設定 さ れた ビ ッ ト は、 ページお よ びページの変換 がア ク セ ス さ れた と い う 記録にな り ます。 TLB ミ ス ハン ド ラ で も 、ページ変換エン ト リ に対応付け ら れた別のデー タ 構造に情報を記録で き ます。 ページ変更情報は、 現在のページ を新 し いページで上書き し て も よ いか、 ま たはハー ド デ ィ ス ク に 格納す る 必要があ る かを示すために使用 さ れます。 シ ス テ ム ソ フ ト ウ ェ アでは、TLB エン ト リ の書 込み保護ビ ッ ト (TLBLO[WR]) を使用 し て、 ページの変更を監視で き ます。 こ のビ ッ ト は、 ページ 66 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク 変換が変更 さ れていない こ と を示すために、読み込み専用 (TLBLO[WR]=0) に初期化す る必要があ り ます。 ページへのデー タ の書 き 込みを最初に実行 し た と き に、 上記の よ う にページが既にア ク セ ス さ れてお り 有効 と 設定 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 ソ フ ト ウ ェ アにページ へ の 書 き 込 み が 許 可 さ れ て い る 場 合 は、 デ ー タ 格 納 ハ ン ド ラ で ペ ー ジ が 書 き 込 み 可 (TLBLO[WR]=1) に設定 さ れ、 戻 り ます。 書 き込み保護設定ビ ッ ト は、 ページが変更 さ れた と い う 記録にな り ます。 デー タ 格納ハン ド ラ で も 、 ページ変換エン ト リ に対応付け ら れた別のデー タ 構造 に こ の情報を記録で き ます。 ページ変更の追跡は、 最初に仮想モー ド にな っ た場合お よ び新 し いプ ロ セ ス の開始時に有用です。 リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク MicroBlaze では、 リ セ ッ ト 、割 り 込み、ユーザー例外、ブ レー ク 、お よ びハー ド ウ ェ ア例外がサポー ト さ れます。 次のセ ク シ ョ ンでは、 各 イ ベン ト の実行フ ロ ーを説明 し ます。 こ れ ら の イ ベン ト の相対的な優先順位は、 次の と お り です。 1. リ セ ッ ト 2. ハー ド ウ ェ ア例外 3. マ ス ク 不可ブ レー ク 4. ブ レー ク 5. 割 り 込み 6. ユーザー ベ ク タ (例外) 表 1-35 に、 ベ ク タ の メ モ リ ア ド レ ス ロ ケーシ ョ ン と ハー ド ウ ェ アで強制 さ れ る戻 り ア ド レ ス の レ ジ ス タ フ ァ イ ル ロ ケーシ ョ ン を示 し ます。 各ベ ク タ は、 ア ド レ ス範囲全体の分岐を可能にす る た め、 2 つのア ド レ ス を割 り 当て ます (IMM 命令の後に BRAI 命令が必要)。 ア ド レ ス範囲 0x28 ~ 0x4F は、 ザ イ リ ン ク ス が今後の ソ フ ト ウ ェ ア サポー ト 用に予約 し てい ます。 ユーザー アプ リ ケー シ ョ ン を こ の範囲内のア ド レ ス に割 り 当て る と 、 今後 リ リ ース さ れ る EDK のサポー ト ソ フ ト ウ ェ ア と 競合す る 可能性があ り ます。 表 1-35 : ベ ク タ と 戻 り ア ド レ スのレ ジ ス タ フ ァ イル ロ ケーシ ョ ン ベク タ ア ド レス レ ジ ス タ フ ァ イル 戻り ア ド レス リ セッ ト 0x00000000 ~ 0x00000004 - ユーザー ベ ク タ (例外) 0x00000008 ~ 0x0000000C Rx 割 り 込み 0x00000010 ~ 0x00000014 R14 0x00000018 ~ 0x0000001C R16 ハー ド ウ ェ ア例外 0x00000020 ~ 0x00000024 R17 ま たは BTR 将来の ソ フ ト ウ ェ ア サポー ト 用に ザ イ リ ン ク ス が予約 0x00000028 ~ 0x0000004F - イ ベン ト ブ レー ク : マ ス ク 不可ハー ド ウ ェ ア ブ レー ク : ハー ド ウ ェ ア ブ レー ク : ソ フ ト ウ ェ ア LDX お よ び STX 命令 と 共に使用する と 、 セマ フ ォやス ピ ン ロ ッ ク な ど の相互排除機能を イ ンプ リ メ ン ト す る ために、 こ れ ら の イ ベン ト はすべて予約ビ ッ ト を ク リ アに し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 67 第 1 章 : MicroBlaze アーキテ ク チ ャ リセッ ト Reset ま たは Debug_Rst (1) がア ク テ ィ ブにな る と 、 パ イ プ ラ イ ンが空に さ れ、 リ セ ッ ト ベ ク タ ( ア ド レ ス 0x0) か ら 命令が フ ェ ッ チ さ れます。 こ れ ら の外部 リ セ ッ ト 信号はア ク テ ィ ブ High で、16 サ イ ク ル以上アサー ト す る 必要があ り ます。 擬似 コ ー ド PC ← 0x00000000 MSR ← C_RESET_MSR (第 2 章 の 「MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン」 を参照) EAR ← 0; ESR ← 0; FSR ← 0 PID ← 0; ZPR ← 0; TLBX ← 0 Reservation ←0 ハー ド ウ ェ ア例外 MicroBlaze は、不正な命令、命令お よ びデー タ バ ス のエ ラ ー、不整列ア ク セ ス と いっ た内部エ ラ ー 状態を検出す る よ う に コ ン フ ィ ギ ュ レーシ ョ ンで き ます。 除算の例外は、 ハー ド ウ ェ ア除算器を使 用す る 場合 (C_USE_DIV=1) のみ イ ネーブルにで き ます。 ハー ド ウ ェ ア浮動小数点ユニ ッ ト を使用 す る 場合 (C_USE_FPU>0) は、浮動小数点に関す る例外であ る ア ン ダーフ ロ ー、オーバーフ ロ ー、0 での浮動小数点数除算、 不正な処理、 お よ び非正規化オペ ラ ン ド エ ラ ー も 検出で き ます。 ハー ド ウ ェ ア MMU を使用す る場合は、 メ モ リ 管理に関す る例外であ る不正命令例外、 デー タ 格納 例外、 命令格納例外、 デー タ TLB ミ ス例外、 お よ び命令 TLB ミ ス例外 も 検出で き ます。 ハー ド ウ ェ ア例外が発生す る と 、 パ イ プ ラ イ ンが空に さ れ、 ハー ド ウ ェ ア例外ベ ク タ (ア ド レ ス 0x20) に分岐 し ます。 実行段の命令は実行 さ れません。 例外が発生す る と 、 汎用レ ジ ス タ R17 が次の よ う にア ッ プデー ト さ れます。 • MMU 例外 (デー タ格納例外、命令格納例外、デー タ TLB ミ ス例外、命令 TLB ミ ス例外) では、 戻 り 時に例外が発生 し た命令を再実行す る ため、レ ジ ス タ R17 に適切なプ ロ グ ラ ム カ ウ ン タ 値 が読み込まれます。 前に IMM 命令があ る 場合は、こ の値は IMM 命令に戻 る よ う に調整 さ れま す。 例外が分岐遅延ス ロ ッ ト の命令で発生 し た場合は、 こ の値は分岐命令に戻 る よ う に調整 さ れます。 前に IMM 命令があ る場合は、 こ の調整 も 実行 さ れます。 • その他の例外では、 例外が分岐遅延ス ロ ッ ト の命令で発生 し た場合を除 き、 後続の命令のプ ロ グ ラ ム カ ウ ン タ 値が レ ジ ス タ R17 に読み込まれます。 例外が分岐遅延ス ロ ッ ト の命令で発生 し た場合は、 ESR[DS] ビ ッ ト が設定 さ れ、 例外ハン ド ラ に よ り BTR に格納 さ れてい る 分岐 タ ーゲ ッ ト ア ド レ ス か ら 実行が再開 さ れます。 RTED 命令を実行する と 、 MSR の EE ビ ッ ト と EIP ビ ッ ト が自動的に反転 さ れます。 RTED 命令、 RTBD 命令、 お よ び RTID 命令を実行す る と 、 MSR の VM ビ ッ ト と UM ビ ッ ト が自 動的に反転 さ れます。 1. XMD デバ ッ ガに よ り MDM を介 し て制御 さ れ る リ セ ッ ト 入力 68 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク 例外の優先順位 複数の例外が同時に発生す る場合、 次の優先順位で処理 さ れます。 • 命令バ ス例外 • 命令 TLB ミ ス 例外 • 命令格納例外 • 不正の op コ ー ド の例外 • 特権命令に よ る 例外 • デー タ TLB ミ ス 例外 • デー タ 格納例外 • 不整列デー タ ア ク セ ス • デー タ バ ス例外 • 除算例外 • FPU 例外 • 高速シ ンプ レ ッ ク ス リ ン ク の例外 例外の原因 • 高速シ ンプ レ ッ ク ス リ ン ク (FSL) に よ る 例外 制御ビ ッ ト の不一致があ る場合に e ビ ッ ト を 1 に設定 し て get 命令ま たは getd 命令を実行す る と 発生 し ます。 • 命令バ ス に よ る 例外 命令側プ ロ セ ッ サ ロ ーカル バ ス (PLB) の例外は、 ス レーブのア ク テ ィ ブ エ ラ ー信号 (IPLB_MrdErr) ま たはアービ タ の タ イ ム ア ウ ト 信号 (IPLB_MTimeout) に よ り 発生 し ます。 命 令側オンチ ッ プ ペ リ フ ェ ラ ル バ ス (IOPB) の例外は、 ス レーブのア ク テ ィ ブ エ ラ ー信号 (IOPB_errAck) ま たはアービ タ の タ イ ム ア ウ ト 信号 (IOPB_timeout) に よ り 発生 し ます。 命令 側の ロ ーカル メ モ リ (ILMB) お よ び CacheLink (IXCL) イ ン タ ーフ ェ イ スは、命令バ ス の例外 の原因にはな り ません。 • 不正な op コ ー ド に よ る 例外 命令で主要 op コ ー ド (命令ビ ッ ト 0 ~ 5) が無効の と き に発生 し ます。 ビ ッ ト 6 ~ 31 はチ ェ ッ ク さ れません。 オプシ ョ ンのプ ロ セ ッ サ命令が イ ネーブルに さ れていない場合は、 不正 と 検出 C_OPCODE_0x0_ILLEGAL が イ ネーブルの場合は、 命令が さ れます。 オプシ ョ ンの 0x00000000 に等 し い と 発生 し ます。 • デー タ バ ス に よ る 例外 デー タ 側プ ロ セ ッ サ ロ ーカル バ ス (PLB) の例外は、 ス レーブのア ク テ ィ ブ エ ラ ー信号 (DPLB_MrdErr ま たは DPLB_MWrErr) ま たはアービ タ のタ イ ム アウ ト 信号 (DPLB_MTimeout) に よ り 発生 し ます。 デー タ側オンチ ッ プ ペ リ フ ェ ラ ル バス (DOPB) の例外は、ス レーブのア ク テ ィ ブ エ ラ ー信号 (DOPB_errAck) ま たはアービ タ の タ イ ム ア ウ ト 信号 (DOPB_timeout) に よ り 発生 し ます。 デー タ 側の ロ ーカル メ モ リ (DLMB) お よ び CacheLink (DXCL) イ ン タ ーフ ェ イ ス は、 デー タ バ ス の例外の原因にはな り ません。 • 不整列デー タ ア ク セ ス に よ る例外 デー タ バ スへのア ド レ ス が 30 ま たは 31 ビ ッ ト の ワー ド ア ク セ ス ま たは 31 ビ ッ ト のハーフ ワ ー ド ア ク セ ス に よ り 発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 69 第 1 章 : MicroBlaze アーキテ ク チ ャ • 除算例外 整数を 0 で除算す る (idiv ま たは idivu) 場合に例外発生す る か、 ま たは符号付 き整数で除算 し た結果 (idiv)オーバーフ ロ ーが発生する 場合に例外が発生 し ます。 • FPU での例外 浮動小数点命令で発生す る ア ン ダーフ ロ ー、 オーバーフ ロー、 0 での除算、 不正な処理、 お よ び 非正規化オペ ラ ン ド エ ラ ーに よ り 発生 し ます。 ♦ ア ン ダーフ ロ ーは、 結果が非正規化数の場合に発生 し ます。 ♦ オーバーフ ロ ーは、 結果が非数 (NaN) の場合に発生 し ます。 ♦ 0 での除算に よ る FPU の例外は、 rB が無限大ではない と き に fdiv の rA オペ ラ ン ド が 0 であ る と 発生 し ます。 ♦ 不正な処理は、NaN オペ ラ ン ド の送信ま たは不正な無限大ま たは 0 オペ ラ ン ド の組み合わ せに よ り 発生 し ます。 • 特権命令に よ る 例外 特権命令を ユーザー モー ド で実行す る と 発生 し ます。 • デー タ 格納に よ る 例外 メ モ リ のデー タ にア ク セ スす る と メ モ リ 保護違反 と な る場合に発生 し ます。 • 命令格納に よ る 例外 メ モ リ の命令にア ク セ スす る と メ モ リ 保護違反 と な る場合に発生 し ます。 • デー タ TLB ミ ス に よ る 例外 有効な TLB エン ト リ が存在せず仮想保護モー ド が イ ネーブルの場合に、 メ モ リ のデー タ にア ク セ スす る と 発生 し ます。 • 命令 TLB ミ ス に よ る 例外 有効な TLB エン ト リ が存在せず仮想保護モー ド が イ ネーブルの場合に、 メ モ リ の命令にア ク セ スす る と 発生 し ます。 擬似 コ ー ド ESR[DS] ← 遅延ス ロ ッ ト の例外 if ESR[DS] then BTR ← タ ーゲ ッ ト PC の分岐 if MMU exception then if branch preceeded by IMM then r17 ← PC - 8 else r17 ← PC - 4 else r17 ← 無効な値 else if MMU exception then if instruction preceeded by IMM then r17 ← PC - 4 else r17 ← PC else r17 ← PC + 4 PC ← 0x00000020 MSR[EE] ← 0, MSR[EIP]← 1 MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0 70 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク ESR[EC] ← 例外値 ESR[ESS] ← 例外値 EAR ← 例外値 FSR ← 例外値 Reservation ←0 ブ レーク ブ レー ク には、 次の 2 種類があ り ます。 • ハー ド ウ ェ ア (外部) ブ レー ク • ソ フ ト ウ ェ ア (内部) ブ レー ク ハー ド ウ ェ ア ブ レー ク ハー ド ウ ェ ア ブ レー ク は、 外部ブ レー ク 信号 (Ext_BRK お よ び Ext_NM_BRK 入力ポー ト ) を ア サー ト す る と 実行 さ れます。 ブ レー ク が発生す る と 、実行段の命令は完了 さ れ、デ コー ド 段の命令は ブ レー ク ベ ク タ ( ア ド レ ス 0x18) への分岐に置 き換え ら れます。ブ レー ク 戻 り ア ド レ ス (ブ レー ク 発 生時にデ コ ー ド 段にあ っ た命令に関連付け ら れてい る PC) は、 汎用レ ジ ス タ R16 に読み込まれま す。 ま た、 マシ ン ス テー タ ス レ ジ ス タ (MSR) で BIP (ブ レー ク 実行中) フ ラ グが設定 さ れます。 通常のハー ド ウ ェ ア ブ レー ク (Ext_BRK 入力ポー ト ) は、MSR[BIP] お よび MSR[EIP] が 0 に設定 さ れてい る (実行中のブ レー ク ま たは例外がない) 場合にのみ処理 さ れます。 BIP フ ラ グがア ク テ ィ ブにな る と 、割 り 込みがデ ィ ス エーブルにな り ます。 マ ス ク 不可ブ レー ク (Ext_NM_BRK 入力ポー ト ) は即座に処理 さ れます。 RTBD 命令が実行 さ れ る と 、 MSR の BIP ビ ッ ト が ク リ ア さ れます。 Ext_BRK 信号は、ブ レー ク が開始す る ま ではアサー ト さ れた ま ま で、RTBD 命令が実行 さ れ る前に デ ィ アサー ト さ れ る 必要があ り ます。 Ext_NM_BRK 信号は、 1 ク ロ ッ ク サ イ ク ルだけアサー ト さ れ る 必要があ り ます。 ソ フ ト ウ ェ ア ブ レー ク ソ フ ト ウ ェ ア ブ レー ク を実行す る には、 brk お よ び brki 命令を使用 し ます。 ソ フ ト ウ ェ ア ブ レー ク の詳細は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。 レ イテンシ ブ レー ク が発生 し てか ら ブ レー ク のサービ ス ルーチンが開始 さ れ る ま でにかか る 時間は、その時点 で実行段にあ る 命令お よ びブ レー ク ベ ク タ を格納 し てい る メ モ リ の レ イ テ ン シに よ っ て異な り ま す。 擬似 コ ー ド r16 ← PC PC ← 0x00000018 MSR[BIP] ← 1 MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0 Reservation ←0 割 り 込み MicroBlaze では、外部割 り 込み ソ ース (割 り 込み入力ポー ト に接続) が 1 つサポー ト さ れてい ます。 割 り 込みは、 マシ ン ス テー タ ス レ ジ ス タ (MSR) の割 り 込み イ ネーブル ビ ッ ト (IE) が 1 に設定 さ れてい る 場合にのみ処理 さ れます。 割 り 込みが発生す る と 、 実行段の命令は完了 さ れ、 デ コー ド 段 の命令は割 り 込みベ ク タ ( ア ド レ ス 0x10) への分岐に置 き換え ら れます。割 り 込み戻 り ア ド レ ス (割 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 71 第 1 章 : MicroBlaze アーキテ ク チ ャ り 込み発生時にデ コ ー ド 段にあ っ た命令に関連付け ら れてい る PC) は、自動的に汎用レ ジ ス タ R14 に読み込まれます。 ま た、 MSR の IE ビ ッ ト が 0 にな り 、 こ れ以降の割 り 込みはデ ィ ス エーブルに な り ます。 RTID 命令が実行 さ れ る と 、 IE ビ ッ ト が再び 1 に設定 さ れます。 MSR の BIP (ブ レー ク 実行中) ビ ッ ト ま たは EIP (例外実行中) ビ ッ ト のいずれかが 1 に設定 さ れて い る 場合は、 割 り 込みは無視 さ れます。 パ ラ メ ー タ C_INTERRUPT_IS_EDGE を使用 し 、 外部割 り 込みを レベルま たはエ ッ ジで設定す る こ と がで き ます。 • レベルでの割 り 込みを使用す る場合、 MicroBlaze 割 り 込みを取 り 込んで割 り 込みベ ク タ に ジ ャ ンプす る ま で、 割 り 込み入力はセ ッ ト さ れた ま ま であ る必要があ り ます。 割 り 込みハン ド ら か ら 返 さ れ る 前に、 ソ フ ト ウ ェ アは割 り 込みを ク リ アにす る必要があ り ます。 ク リ アにな っ ていなければ、 割 り 込みハン ド ら か ら 返 さ れたに割 り 込みが イ ネーブルにな り 次第、 割 り 込み は再度取 り 込まれます • エ ッ ジでの割 り 込みを使用す る場合、 MicroBlaze で割 り 込み入力エ ッ ジが検出 さ れ ラ ッ チ さ れます。 つま り 、 こ の入力は 1 ク ロ ッ ク サ イ ク ルでアサー ト さ れ る必要があ り ます。 割 り 込 み入力はアサー ト さ れた ま ま の状態で構い ませんが、 新たな割 り 込みが検出 さ れ る 前に最低 1 ク ロ ッ ク サ イ ク ル間はデ ィ アサー ト さ れてい る 必要があ り ます。 レ イテンシ 割 り 込みが発生 し てか ら ISR (割 り 込みサービ ス ルーチン ) が開始 さ れ る ま でにかか る 時間は、プ ロ セ ッ サの コ ン フ ィ ギ ュ レーシ ョ ンお よ び割 り 込みベ ク タ を格納 し てい る メ モ リ コ ン ト ロ ー ラ の レ イ テ ン シに よ っ て異な り ます。 MicroBlaze にハー ド ウ ェ ア除算器が含まれ る 場合、除算命令の実行 中に割 り 込みが発生す る と 、 レ イ テ ン シが最大にな り ます。 擬似 コ ー ド r14 ← PC PC ← 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 ← 0x00000008 MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0 Reservation ←0 命令キ ャ ッ シ ュ 概要 MicroBlaze を オプシ ョ ンの命令キ ャ ッ シ ュ と 共に使用 し て、 LMB のア ド レ ス範囲外にあ る コ ー ド を実行す る 際のパフ ォーマン ス を向上 さ せ る こ と がで き ます。 命令キ ャ ッ シ ュ には、 次の特徴があ り ます。 72 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 命令キ ャ ッ シ ュ • ダ イ レ ク ト マ ッ プ方式 (連想度 1) • ユーザーがキ ャ ッ シ ュ可能 メ モ リ のア ド レ ス範囲を指定可能 • キ ャ ッ シ ュ サ イ ズお よび タ グ サ イ ズ を設定可能 • CacheLink (XCL) イ ン タ ーフ ェ イ ス を使用 し た キ ャ ッ シ ュ • 4 ま たは 8 ワ ー ド のキ ャ ッ シ ュ ラ イ ン • MSR ビ ッ ト を使用 し た キ ャ ッ シ ュ のオン /オフ制御 • 命令キ ャ ッ シ ュ ラ イ ン を無効にす る WIC 命令 ( オプシ ョ ン ) 命令キ ャ ッ シ ュの機能 命令キャ ッ シュ の使用時には、メ モリ アド レ ス 空間はキャ ッ シュ 可能なセグ メ ン ト と キャ ッ シュ 不可 能なセグメ ン ト の 2 つに分割さ れま す。 キャ ッ シュ 可能なセグ メ ン ト は、 C_ICACHE_BASEADDR お よ び C_ICACHE_HIGHADDR の 2 つのパ ラ メ ー タ で定義 さ れます。 こ の範囲内のア ド レ ス は、 すべてキ ャ ッ シ ュ 可能なア ド レ ス セグ メ ン ト に対応 し てい ます。 その他のア ド レ スは、 キ ャ ッ シ ュ 不可能なア ド レ ス です。 キ ャ ッ シ ュ 可能なセグ メ ン ト サ イ ズは 2N であ る 必要があ り ます (N は正の整数)。 C_ICACHE _BASEADDR お よ び C_ICACHE_HIGHADDR で指定す る範囲は完全な 2 のべ き 乗の範囲に し 、 C_ICACHE_BASEADDR の最下位ビ ッ ト は 0 にす る 必要があ り ます。 キ ャ ッ シ ュ 可能な命令ア ド レ スは、 キ ャ ッ シ ュ ア ド レ スお よ び タ グ ア ド レ ス か ら 構成 さ れます。 MicroBlaze の命令キ ャ ッ シ ュ は 64B ~ 64KB の範囲で設定で き、 こ れは 6 ~ 16 ビ ッ ト のキ ャ ッ シ ュ ア ド レ ス に対応 し てい ます。 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス を合わせた も のが、 キ ャ ッ シ ュ 可能な メ モ リ の完全ア ド レ ス に一致す る よ う に設定す る必要があ り ます。 キ ャ ッ シ ュ サ イ ズ を 2KB 未満に指定す る と 、タ グ RAM お よ び命令 RAM の イ ンプ リ メ ン ト には分散 RAM が使用 さ れ ます。 た と えば、 C_ICACHE_BASEADDR= 0x00300000、 C_ICACHE_HIGHADDR=0x0030ffff、 C_CACHE_BYTE_SIZE=4096、C_ICACHE_LEN=8 の よ う に設定 さ れてい る場合、キ ャ ッ シ ュ可 能な 64KB の メ モ リ では 16 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ、 4KB のキ ャ ッ シ ュ では 12 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ る ため、 必要なア ド レ ス タ グは 16 - 12 = 4 ビ ッ ト です。 こ の場合、 1024 ワー ド の命令の格納に RAMB16 が 2 個、128 個のキ ャ ッ シ ュ ラ イ ン (4 ビ ッ ト の タ グ + 8 ワ ー ド 有効ビ ッ ト + 1 ラ イ ン有効ビ ッ ト ) エン ト リ に RAMB16 が 1 個必要 と な る ので、 合計で 3 個の RAMB16 プ リ ミ テ ィ ブが必要です。 74 ページの図 1-20 に、 命令キ ャ ッ シ ュ の構成を示 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 73 第 1 章 : MicroBlaze アーキテ ク チ ャ 命令ア ド レ ス ビ ッ ト 0 3031 タグ ア ド レス ラ イ ン ア ド レス タグ タグ - - キャ ッ シュ ア ド レス Cache_Hit = RAM 有効 ( ワー ド お よび ラ イ ン ) ワー ド ア ド レ ス 命令 Cache_instruction_data RAM 図 1-20 : 命令キ ャ ッ シ ュの構成 命令キ ャ ッ シ ュの動作 命令が フ ェ ッ チ さ れ る ご と に、 命令ア ド レ ス がキ ャ ッ シ ュ可能なセグ メ ン ト に属す る も のであ る か が検出 さ れます。 ア ド レ ス がキ ャ ッ シ ュ 不可能な場合は、 キ ャ ッ シ ュ コ ン ト ロ ー ラ では命令が無視 さ れ、 PLB、 OPB、 ま たは LMB で命令が実行 さ れます。 ア ド レ ス がキ ャ ッ シ ュ可能な場合は、 タ グ メ モ リ でル ッ ク ア ッ プが実行 さ れ、要求 さ れた ア ド レ ス がキ ャ ッ シ ュ に含まれ る か ど う かが確認 さ れます。 ワ ー ド お よ び ラ イ ンの有効ビ ッ ト が設定 さ れてお り 、 タ グ ア ド レ ス が命令ア ド レ ス の タ グ ア ド レ ス セグ メ ン ト と 一致すれば、ル ッ ク ア ッ プが成功 し た こ と にな り ます。 キ ャ ッ シ ュ ミ ス の 場合、 キ ャ ッ シ ュ コ ン ト ロ ー ラ は命令側の CacheLink (IXCL) に新 し い命令を要求 し 、 メ モ リ コ ン ト ロ ー ラ か ら 戻 さ れ る 関連キ ャ ッ シ ュ ラ イ ン を待ち ます。 命令キ ャ ッ シ ュの ソ フ ト ウ ェ ア サポー ト MSR ビ ッ ト MSR の ICE ビ ッ ト は、 キ ャ ッ シ ュ の イ ネーブル、 デ ィ ス エーブルを制御 し ます。 キ ャ ッ シ ュ がデ ィ ス エーブルの場合、 デフ ォ ル ト ではキ ャ ッ シ ュ の内容が保持 さ れます。 WIC 命令 ま たは MicroBlaze のハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用する と 、キ ャ ッ シ ュ ラ イ ン を無効にで き ます。 WIC 命令 オプシ ョ ンの WIC 命令 (C_ALLOW_ICACHE_WR=1) を使用す る と 、命令キ ャ ッ シ ュ に含まれ る キ ャ ッ シ ュ ラ イ ン を アプ リ ケーシ ョ ンか ら 無効にで き ます。 詳細は、第 4 章 「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。 74 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) デー タ キ ャ ッ シ ュ デー タ キ ャ ッ シ ュ 概要 MicroBlaze は、 オプシ ョ ンのデー タ キ ャ ッ シ ュ を使用 し てパフ ォーマン ス を向上 さ せ る こ と がで き ます。 キ ャ ッ シ ュ メ モ リ の範囲には、 LMB ア ド レ ス範囲内のア ド レ ス を含めないで く だ さ い。 デー タ キ ャ ッ シ ュ には、 次の特徴があ り ます。 • ダ イ レ ク ト マ ッ プ方式 (連想度 1) • ラ イ ト スルーま たは ラ イ ト バ ッ ク • ユーザーがキ ャ ッ シ ュ可能 メ モ リ のア ド レ ス範囲を指定可能 • キ ャ ッ シ ュ サ イ ズお よび タ グ サ イ ズ を設定可能 • CacheLink (XCL) イ ン タ ーフ ェ イ ス を使用 し た キ ャ ッ シ ュ • 4 ま たは 8 ワ ー ド のキ ャ ッ シ ュ ラ イ ン • MSR ビ ッ ト を使用 し た キ ャ ッ シ ュ のオン /オフ制御 • デー タ キ ャ ッ シ ュ ラ イ ン を無効にす る、 ま たはフ ラ ッ シ ュす る WDC 命令 ( オプシ ョ ン ) デー タ キ ャ ッ シ ュ の機能 デー タ キ ャ ッ シ ュ の使用時には、メ モ リ ア ド レ ス空間はキ ャ ッ シ ュ可能なセグ メ ン ト と キ ャ ッ シ ュ 不可能なセグ メ ン ト の 2 つに分割 さ れます。 キ ャ ッ シ ュ 可能な領域は、 C_DCACHE_BASEADDR お よ び C_DCACHE_HIGHADDR の 2 つのパ ラ メ ー タ で定義 さ れます。 こ の範囲内のア ド レ ス は、 すべてキ ャ ッ シ ュ 可能なア ド レ ス空間に対応 し てい ます。 その他のア ド レ スは、 キ ャ ッ シ ュ不可能 なア ド レ ス です。 キ ャ ッ シ ュ 可能なセグ メ ン ト サ イ ズは 2N であ る 必要があ り ます (N は正の整数)。 C_DCACHE _BASEADDR お よ び C_DCACHE_HIGHADDR で指定す る範囲は完全な 2 のべ き 乗の範囲に し 、 C_DCACHE_BASEADDR の最下位ビ ッ ト は 0 にす る 必要があ り ます。 図 1-21 に、 デー タ キ ャ ッ シ ュ の構成を示 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 75 第 1 章 : MicroBlaze アーキテ ク チ ャ デー タ ア ド レ ス ビ ッ ト 0 タグ ア ド レス ア ド レス タグ タグ RAM 有効 キ ャ ッ シ ュ ワー ド ア ド レ ス = 3031 - - Cache_Hit Load_Instruction ア ド レス デー タ Cache_data RAM 図 1-21 : デー タ キ ャ ッ シ ュの構成 キ ャ ッ シ ュ 可能なデー タ ア ド レ ス は、 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス で構成 さ れてい ます。 MicroBlaze のデー タ キ ャ ッ シ ュ は 64B ~ 64KB の範囲で設定で き 、こ れは 6 ~ 16 ビ ッ ト のキ ャ ッ シ ュ ア ド レ ス に対応 し ています。 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス を合わせた も のが、 キ ャ ッ シ ュ 可 能 な メ モ リ の 完 全 ア ド レ ス に 一 致 す る よ う に 設 定 す る 必 要 が あ り ま す。 C_AREA_OPTIMIZED がセ ッ ト さ れ C_DCACHE_USE_WRITEBACK がセ ッ ト さ れていない場 合、 ブ ロ ッ ク RAM が常にデー タ RAM の イ ンプ リ メ ン ト に使用 さ れ る の を除 き 、 2 kB 以下の キ ャ ッ シ ュ サ イ ズ を選択す る場合は、 タ グ RAM お よ びデー タ RAM の イ ンプ リ メ ン ト には分散 RAM が使用 さ れます。 た と えば、 C_DCACHE_BASEADDR=0x00400000、 C_DCACHE_HIGHADDR=0x00403fff、 C_DCACHE_BYTE_SIZE=2048、 お よび C_DCACHE_LEN=4 の よ う に設定 さ れてい る場合、 キ ャ ッ シ ュ 可能な 16KB の メ モ リ では 14 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ、2KB のキ ャ ッ シ ュ では 11 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ る ため、必要な ア ド レ ス タ グは 14 - 11 = 3 ビ ッ ト です。 こ の場合、 512 ワ ー ド のデー タ の格納に RAMB16 が 1 個、 128 個のキ ャ ッ シ ュ ラ イ ン (3 ビ ッ ト の タ グ + 4 ワ ー ド 有効ビ ッ ト + 1 ラ イ ン有効ビ ッ ト ) エン ト リ に RAMB16 が 1 個必要 と な る ので、合 計で 2 個の RAMB16 プ リ ミ テ ィ ブが必要です。 デー タ キ ャ ッ シ ュ の動作 MicroBlaze のデー タ キ ャ ッ シ ュ 、 ラ イ ト バ ッ ク 、 ま たは ラ イ ト スルーで使用 さ れ る キ ャ ッ シ ュ ポ リ シーは、 パ ラ メ ー タ C_DCACHE_USE_WRITEBACK で決ま り ます。 こ のパ ラ メ ー タ が設定 さ れてい る 場合 ラ イ ト バ ッ ク プ ロ ト コ ルが イ ンプ リ メ ン ト さ れ、 設定 さ れていない場合は ラ イ ト ス ルーが イ ンプ リ メ ン ト さ れます。 し か し 、 MMU (C_USE_MMU > 1、 C_AREA_OPTIMIZED = 0、 C_DCACHE_USE_WRITEBACK = 1) で コ ン フ ィ ギ ュ レーシ ョ ン さ れ る場合、 仮想モー ド の キ ャ ッ シ ュ ポ リ シーは TLB エン ト リ の W 保存属性で決ま り 、ラ イ ト バ ッ ク は実モー ド で使用 さ れ ます。 ラ イ ト バ ッ ク プ ロ ト コ ルの場合、 キ ャ ッ シ ュ可能範囲内にあ る ア ド レ スへ保存す る と 常にキ ャ ッ シ ュ デー タ が更新 さ れます。タ ーゲ ッ ト ア ド レ ス ワ ー ド がキ ャ ッ シ ュ にない場合 (つま り ア ク セ ス がキ ャ ッ シ ュ ミ ス ) で、 キ ャ ッ シ ュ の ロ ケーシ ョ ンに メ モ リ に ま だ書 き 込まれていないデー タ があ る 場合、 新 し いデー タ でキ ャ ッ シ ュ が更新 さ れ る 前に、 古いデー タ はデー タ CacheLink (DXCL) を 使用 し 外部 メ モ リ に書 き込まれます。 キ ャ ッ シ ュ ラ イ ン全体を書 き込む必要があ る場合バース ト 76 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) デー タ キ ャ ッ シ ュ キ ャ ッ シ ュ ラ イ ン書 き 込みが使用 さ れますが、 それ以外は、 シ ン グル ワ ー ド 書 き込みが使用 さ れま ミ ス があ っ た場合は、 ア ド レ スは まず す。 バ イ ト ま たはハーフ ワ ー ド 保存の場合、 キ ャ ッ シ ュ CacheLink を使用 し て要求 さ れ、 ワ ー ド 保存に よ り キ ャ ッ シ ュ が更新 さ れます。 ラ イ ト ス ルー プ ロ ト コ ルを使用 し 、 キ ャ ッ シ ュ 可能な範囲のア ド レ ス に格納する こ と に よ り 、 デー タ CacheLink を使用 し て同等のバ イ ト 、 ハーフ ワ ー ド 、 ま たは ワ ー ド を外部 メ モ リ に書 き 込む こ と が可能です。 書 き 込みでは、 タ ーゲ ッ ト ア ド レ ス ワー ド がキ ャ ッ シ ュ 内の場合 ( キ ャ ッ シ ュ ヒ ッ ト の場合) に、キ ャ ッ シ ュ デー タ も 更新 さ れます。 キ ャ ッ シ ュ ミ ス の場合は、キ ャ ッ シ ュ に関連キ ャ ッ シ ュ ラ イ ンは読み込まれません。 キ ャ ッ シ ュ の イ ネーブル時に、デー タ を キ ャ ッ シ ュ可能な範囲のア ド レ ス か ら 読み出す と 、要求デー タ が現在キ ャ ッ シ ュ に含まれてい る かが確認 さ れます。 含まれてい る 場合 ( キ ャ ッ シ ュ ヒ ッ ト の場 合) は要求デー タ がキ ャ ッ シ ュ か ら 取得 さ れ、 含まれていない場合 ( キ ャ ッ シ ュ ミ ス の場合) はデー タ CacheLink を使用 し て ア ド レ ス が要求 さ れ、パ イ プ ラ イ ン処理は要求ア ド レ ス に関連す る キ ャ ッ シ ュ ラ イ ンが外部 メ モ リ コ ン ト ロ ー ラ か ら 戻 さ れ る ま で ス ト ール し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 77 第 1 章 : MicroBlaze アーキテ ク チ ャ デー タ キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト MSR ビ ッ ト MSR の DCE ビ ッ ト は、 キ ャ ッ シ ュ の イ ネーブル、 デ ィ ス エーブルを制御 し ます。 デ ィ ス エーブル にす る 場合は、 PLB ま たは OPB か ら 読み出 し を開始す る前に、 キ ャ ッ シ ュ可能な範囲の書 き込み がすべて外部 メ モ リ で完了 し てい る こ と を確認す る必要があ り ます。 確認す る には、 キ ャ ッ シ ュ を オ フ にす る 直前にセマ フ ォ に書 き込み、 書 き込みが完了す る ま でループ ポー リ ン グ を実行 し ます。 キ ャ ッ シ ュ がデ ィ ス エーブルの場合、 デフ ォ ル ト ではキ ャ ッ シ ュ の内容が保持 さ れます。 WDC 命令 オプシ ョ ンの WDC 命令 (C_ALLOW_DCACHE_WR=1) を使用する と 、 アプ リ ケーシ ョ ンに含ま れ る デー タ キ ャ ッ シ ュ のキ ャ ッ シ ュ ラ イ ン を無効にす る か、 ま たはフ ラ ッ シ ュ で き ます。 詳細は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。 浮動小数点ユニ ッ ト (FPU) 概要 MicroBlaze の浮動小数点ユニ ッ ト は、 IEEE 754 規格に準拠 し てい ます。 • IEEE 754 の単精度浮動小数点フ ォーマ ッ ト (無限の定義、 NaN (Not A Number)、 お よ び 0 を 含む) を使用 • 加算、 減算、 乗算、 除算、 比較、 変換お よ び平方根命令を サポー ト • 最 も 近い値に繰 り 上げ/繰 り 下げ る モー ド (Round-to-Nearest) を イ ンプ リ メ ン ト • ア ン ダーフ ロ ー、 オーバーフ ロ ー、 ゼ ロ での除算、 お よ び無効な操作に対す る ス テー タ ス ビ ッ ト を生成 パフ ォーマ ン ス を向上 さ せ る ため、 次の よ う な非標準的な簡略化 も 適用 さ れてい ます。 • 非正規化 (1) オペ ラ ン ド はサポー ト さ れません。 非正規化値に対 し てハー ド ウ ェ ア浮動小数点の 操作が実行 さ れ る と 、quiet NaN が返 さ れ、FSR の非正規化オペ ラ ン ド エ ラ ー ビ ッ ト が 1 にな り ます。 詳細は、 36 ページの 「浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (FSR)」 を参照 し て く だ さ い。 • 非正規化値の結果は、符号付き の 0 と し て格納 さ れ、FSR のア ン ダーフ ロ ー ビ ッ ト が 1 にな り ます。 こ の方法は、 FTZ (Flush-to-Zero) と 呼ばれます。 • quiet NaN に対する 操作では、NaN オペ ラ ン ド の 1 つではな く 固定の NaN (0xFFC00000) が返 さ れます。 • 浮動小数点の操作に よ り オーバーフ ロ ーが発生 し た場合は、 常に符号付 き ∞ が返 さ れます。 1. (1.17549 X 10-38 > n > 0 ) ま たは ( 0 > n > -1.17549 X 10-38) の範囲内にあ る 値 n の よ う に 0 に非常に近 く 、 完全精 度で も 表す こ と がで き ない値。 78 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 浮動小数点ユニ ッ ト (FPU) フ ォ ーマ ッ ト IEEE 754 の単精度浮動小数点値は、 次の 3 つの フ ィ ール ド か ら 構成 さ れてい ます。 1. 1 ビ ッ ト の符号 (sign) 2. 8 ビ ッ ト の指数部 (exponent) - ゲ タ ば き 表現 3. 23 ビ ッ ト の仮数部 (fraction) - mantissa ま たは significand こ れ ら の フ ィ ール ド は、 図 1-22 に示す よ う に 32 ビ ッ ト ワー ド に格納 さ れます。 0 1 9 31 ↑ ↑ ↑ 符号 指数部 仮数部 図 1-22 : IEEE 754 の単精度浮動小数点フ ォ ーマ ッ ト MicroBlaze では、 浮動小数点値 v は次の よ う に解釈 さ れます。 1. exponent = 255、 fraction <> 0 の場合、 符号ビ ッ ト にかかわ ら ず v= NaN と な り ます。 2. exponent = 255、 fraction = 0 の場合、 v= (-1)sign X ∞ と な り ます。 3. 0 < exponent < 255 の場合、 v = (-1)sign X 2(exponent - 127) X (1.fraction) 4. exponent = 0、 fraction <> 0 の場合、 v = (-1)sign X 2-126 X (0.fraction) 5. exponent = 0、 fraction = 0 の場合、 v = (-1)sign X 0 と な り ます。 実際には 3 と 5 のみが有益で、その他の値ではエ ラ ーが発生す る か、 32 ビ ッ ト では完全な精度で表 現で き ません。 繰 り 上げ/繰 り 下げ MicroBlaze の FPU では、 IEEE 754 で指定 さ れた、 最 も 近い値に繰 り 上げ/繰 り 下げ る デフ ォ ル ト のモー ド (Round-to-Nearest) のみが イ ンプ リ メ ン ト さ れます。 こ のモー ド では、 浮動小数点の操作 結果は、 無限の精度の結果に最 も 近い単精度値 と な り ます。 同程度に近い値が 2 つあ る 場合は、 最 下位ビ ッ ト が 0 の も のが使用 さ れます。 操作 MicroBlaze FPU 操作では、 専用の浮動小数点レ ジ ス タ フ ァ イ ルではな く 、 プ ロ セ ッ サの汎用レ ジ ス タ が使用 さ れます。 「汎用レ ジ ス タ 」 を参照 し て く だ さ い。 演算 FPU では、 次の浮動小数点演算が イ ンプ リ メ ン ト さ れます。 • 加算 (fadd) • 減算 (fsub) • 乗算 (fmul) • 除算 (fdiv) • 平方根 (fsqrt、 C_USE_FPU = 2 の場合使用可能) 比較 FPU では、 次の浮動小数点比較が イ ンプ リ メ ン ト さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 79 第 1 章 : MicroBlaze アーキテ ク チ ャ • 小な り (fcmp.lt) • 等価 (fcmp.eq) • 以下 (fcmp.le) • 大な り (fcmp.gt) • 非等価 (fcmp.ne) • 以上 (fcmp.ge) • 順序付けな し (fcmp.un) - NaN で使用 変換 FPU では、 次の変換が イ ンプ リ メ ン ト さ れます (C_USE_FPU = 2 の場合)。 • 符号付 き 整数か ら 浮動小数点への変換 (flt) • 浮動小数点か ら 符号付 き整数への変換 (fint) 例外 MicroBlaze の浮動小数点ユニ ッ ト は、 通常のハー ド ウ ェ ア例外 メ カ ニ ズ ム を使用 し ます。 例外が イ ネーブルの場合、 IEEE 規格で指定 さ れ る状態 ( ア ン ダーフ ロ ー、 オーバーフ ロ ー、 0 での除算、 不 正な操作) お よび MicroBlaze 特定の例外であ る非正規化オペ ラ ン ド エ ラ ーに よ り 例外処理が実行 さ れます。 浮動小数点の例外が発生す る と 、デス テ ィ ネーシ ョ ン レ ジ ス タ (Rd) への書 き込みが禁止 さ れます。 こ れに よ り 、 破損 し ていないレ ジ ス タ フ ァ イ ルが浮動小数点例外ハン ド ラ に よ り 処理 さ れます。 ソ フ ト ウ ェ ア サポー ト GCC を基本に し た EDK コ ンパ イ ラ シ ス テ ムは、 MicroBlaze API に準拠 し た浮動小数点ユニ ッ ト を サポー ト し てい ます。 コ ンパ イ ラ の フ ラ グは、XPS ま たは SDK を使用す る場合、シ ス テ ムにあ る FPU の タ イ プに基づき 自動的に GCC コ マン ド ラ イ ンに追加 さ れます。 倍精度の操作はすべて ソ フ ト ウ ェ アでエ ミ ュ レー ト さ れます。 xil_printf() では浮動小数点の出力は サポー ト さ れていないので注意 し て く だ さ い。 標準 C ラ イ ブ ラ リ の printf() お よ び関連関数では浮 動小数点出力がサポー ト さ れていますが、 プ ロ グ ラ ムの コー ド サ イ ズが大き く な り ます。 ラ イ ブ ラ リ およびバイ ナ リ の互換性 EDK コ ンパ イ ラ シ ス テ ムには、ソ フ ト ウ ェ アの浮動小数点 C ラ ン タ イ ム ラ イ ブ ラ リ のみが含まれ てい ます。 ハー ド ウ ェ ア FPU を利用す る には、ラ イ ブ ラ リ を適切な コ ンパ イ ラ オプシ ョ ン を設定 し て再 コ ンパ イ ルす る 必要があ り ます。 別の コ ンパ イ ルが使用 さ れ る ケース では、 ビル ド 内の FPU の コ ンパ イ ラ フ ラ グが同 じ であ る こ と を確認す る こ と が重要です。 オペ レー タ レ イ テ ン シ FPU でサポー ト さ れてい る さ ま ざ ま な操作の レ イ テ ン シは、 第 4 章 「MicroBlaze 命令セ ッ ト アー キ テ ク チ ャ 」 に リ ス ト さ れてい ます。 FPU 命令はパ イ プ ラ イ ン化 さ れていないため、 1 度に 1 つの 操作のみが行われます。 80 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) ソ フ ト ウ ェ ア サポー ト 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 に設定 さ れ てい る 場合、 で き る 限 り 変換を避け る のが最善です。 次の例は 「悪い例」 で、 浮動小数点で 1 か ら 10 の整数の平方和が計算 さ れてい ます。 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 ラ ン タ イ ム数学 ラ イ ブ ラ リ 関数は、 倍精度の演算を行い ます。 単精度の FPU を使用す る場 合、平方根関数 sqrt() の呼び出 し で、 FPU 命令ではな く 非効率なエ ミ ュ レーシ ョ ン ルーチンが使用 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 81 第 1 章 : MicroBlaze アーキテ ク チ ャ #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 */ こ の コー ド を コ ンパ イ ルす る場合、 コ ンパ イ ラ フ ラ グは -mhard-float お よ び -mxl-float-sqrt に加 え、 -fno-math-errno を使用す る必要があ り ます。 こ れは、 errno 変数を ア ッ プデー ト す る こ と でエ ラ ー コ ンデ ィ シ ョ ン を処理す る ための不必要な コー ド が コ ンパ イ ラ で生成 さ れない よ う にす る た めです。 高速シ ン プ レ ッ ク ス リ ン ク (FSL) MicroBlaze では、 入力ポー ト と 出力ポー ト を 1 つずつ持つ高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス を 16 個ま で使用で き ます。 FSL チ ャ ネルは、 ポ イ ン ト ツー ポ イ ン ト 接続 さ れた単一 方向デー タ ス ト リ ー ミ ン グ イ ン タ ーフ ェ イ ス です。FSL イ ン タ ーフ ェ イ ス の詳細は、ザ イ リ ン ク ス EDK IP の資料のデー タ シー ト (DS449) 『Fast Simplex Link (FSL) Bus』 を参照 し て く だ さ い。 MicroBlaze の FSL イ ン タ ーフ ェ イ ス は、 32 ビ ッ ト 幅です。 別のビ ッ ト で、 送信/受信ワ ー ド が制御 信号であ る かデー タ であ る かが示 さ れます。 FSL ポー ト か ら 汎用レ ジ ス タ に情報を転送す る には、 MicroBlaze ISA の get 命令を使用 し ます。 汎用レ ジ ス タ か ら FSL ポー ト に情報を転送す る には、 put 命令を使用 し ます。 ど ち ら の命令に も 、ブ ロ ッ キ ン グ デー タ用、 ノ ンブ ロ ッ キ ン グ デー タ 用、ブ ロ ッ キ ン グ コ ン ト ロール用、 ノ ンブ ロ ッ キ ン グ コ ン ト ロ ール用の 4 種類があ り ます。 get 命令お よ び put 命令の詳細は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 82 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 高速シ ン プ レ ッ ク ス リ ン ク (FSL) ハー ド ウ ェ ア ア ク セ ラ レ ー タ への FSL の使用 FSL は、プ ロ セ ッ サ パ イ プ ラ イ ンに対す る レ イ テ ン シが短い専用 イ ン タ ーフ ェ イ ス と し て使用で き ます。そのため、プ ロ セ ッ サ実行ユニ ッ ト を カ ス タ ム ハー ド ウ ェ ア ア ク セ ラ レー タ を使用 し て拡張 す る 際に適 し ています。 図 1-23 に、 簡単な例を示 し ます。 コー ド例 FSLx // Configure fx カ ス タ ム ハー ド ウ ェ ア ア ク セ ラ レー タ cput Rc,RFSLx MicroBlaze // Store operands put Ra, RFSLx // op 1 レジス タ フ ァ イル put Rb, RFSLx // op 2 Op1Reg Op2Reg ConfigReg fx // Load result ResultReg get Rt, RFSLx FSLx 図 1-23 : ハー ド ウ ェ ア ア ク セ ラ レー タ フ ァ ン ク シ ョ ン fx に FSL を使用 し た例 こ の方法は、 ISA を カ ス タ ム命令で拡張す る 方法に似てい ますが、 プ ロ セ ッ サ パ イ プ ラ イ ン全体の 速度がカ ス タ ム フ ァ ン ク シ ョ ンに依存 し ない と い う 利点があ り ます。 ま た、 こ の よ う に機能を拡張 す る 場合、 ソ フ ト ウ ェ ア ツール チ ェ ーンに追加の要件はあ り ません。 MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 83 第 1 章 : MicroBlaze アーキテ ク チ ャ デバ ッ グおよび ト レース デバ ッ グの概要 MicroBlaze には、 XMD (Xilinx Microprocessor Debug ) の よ う な JTAG ベース の ソ フ ト ウ ェ ア デ バ ッ グ ツール (バ ッ グ グ ラ ン ド デバ ッ グ モー ド (BDM) デバ ッ ガ と 呼ばれ る ) を サポー ト す る デ バッグ イ ン タ ーフ ェ イ ス が含ま れてい ます。 こ のデバ ッ グ イ ン タ ーフ ェ イ スは、 ザ イ リ ン ク ス FPGA の JTAG ポー ト と と の イ ン タ ーフ ェ イ ス に使用す る マ イ ク ロ プ ロ セ ッ サ デバ ッ グ モジ ュ ー ル (MDM) コ アに接続 さ れます。 複数の MicroBlaze イ ン ス タ ン ス を 1 個の MDM に接続 し てマル チプ ロ セ ッ サをデバ ッ グで き ます。 デバ ッ グの機能は、 次の と お り です。 • ハー ド ウ ェ アのブ レー ク ポ イ ン ト 数お よ びウ ォ ッ チポ イ ン ト 数を設定可能、 ソ フ ト ウ ェ アのブ レー ク ポ イ ン ト 数は無制限 • 外部プ ロ セ ッ サ制御に よ り デバ ッ グ ツールで MicroBlaze を停止、 リ セ ッ ト 、 シ ン グル ス テ ッ プ可能 • メ モ リ 、汎用レ ジ ス タ 、特殊用途レ ジ ス タ に対す る読み出 し /書 き 込み (EAR、EDR、ESR、BTR、 お よ び PVR0 ~ PVR11 は読み出 し のみ) • 複数のプ ロ セ ッ サを サポー ト • 命令キ ャ ッ シ ュ お よ びデー タ キ ャ ッ シ ュ への書 き 込み ト レ ースの概要 MicroBlaze の ト レース イ ン タ ーフ ェ イ スは、パフ ォーマ ン ス を モニ タお よ び解析する ため、多数の 内部ス テー ト 信号を送信 し ます。 ト レース イ ン タ ーフ ェ イ スは、 ザ イ リ ン ク ス が開発 し た解析 コ ア でのみ使用す る こ と をお勧め し ます。 こ の イ ン タ ーフ ェ イ ス は、 MicroBlaze の将来の リ リ ース では サポー ト さ れない可能性があ り ます。 84 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド UG081 (v10.3) 第2章 MicroBlaze の信号イ ン タ ー フ ェ イ ス こ の章では、 MicroBlaze™ に接続で き る信号 イ ン タ ーフ ェ イ ス の タ イ プについて説明 し ます。次の セ ク シ ョ ン よ り 構成 さ れてい ます。 • 概要 • MicroBlaze I/O の概要 • プ ロ セ ッ サ ローカル バ ス (PLB) イ ン タ ーフ ェ イ ス • オンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB) イ ン ターフ ェ イ ス • ロ ーカル メ モ リ バ ス (LMB) イ ン タ ーフ ェ イ ス • 高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス • ザ イ リ ン ク ス CacheLink (XCL) イ ン タ ーフ ェ イ ス • デバ ッ グ イ ン ターフ ェ イ ス • ト レース イ ン ターフ ェ イ ス • MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン 概要 MicroBlaze コ アは、 デー タ ア ク セ スお よ び命令ア ク セ ス に対 し 別々のバ ス イ ン タ ーフ ェ イ ス ユ ニ ッ ト を持つハーバー ド アーキテ ク チ ャ 構造にな っ てい ます。 ロ ーカル メ モ リ バ ス (LMB)、 IBM のプ ロ セ ッ サ ロ ーカル バ ス (PLB) ま たはオンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB)、お よ びザ イ リ ン ク ス CacheLink (XCL) の 3 つの メ モ リ イ ン タ ーフ ェ イ ス がサポー ト さ れてい ます。 LMB では、オン チ ッ プのデ ュ アル ポー ト ブ ロ ッ ク RAM に 1 ク ロ ッ ク サ イ ク ルでア ク セ ス で き ます。 PLB お よ び OPB イ ン タ ーフ ェ イ ス は、オンチ ッ プ と オ フチ ッ プの両方のペ リ フ ェ ラ ルお よ び メ モ リ に接続で き ます。 CacheLink イ ン タ ーフ ェ イ スは、専用の外部 メ モ リ コ ン ト ロー ラ 用です。 ま た MicroBlaze で は、マ ス タ お よ びス レーブ FSL イ ン タ ーフ ェ イ ス を 1 つずつ持つ高速シ ンプ レ ッ ク ス リ ン ク (FSL) ポー ト を 16 個ま で使用で き ます。 機能 MicroBlaze バ ス は、 次のバ ス イ ン タ ーフ ェ イ ス を使用 し て コ ン フ ィ ギ ュ レーシ ョ ンで き ます。 • 32 ビ ッ ト の PLB V4.6 イ ン タ ーフ ェ イ ス (IBM の 『128-Bit Processor Local Bus Architectural Specifications, Version 4.6』 を参照) • 32 ビ ッ ト の OPB V2.0 バ ス イ ン タ ーフ ェ イ ス (IBM の 『64-Bit On-Chip Peripheral Bus, Architectural Specifications, Version 2.0』 を参照) • LMB ではブ ロ ッ ク RAM を効率 よ く 転送す る単純な同期プ ロ ト コ ルを提供 • FSL では、 高速でアービ ト レーシ ョ ン を使用 し ない ス ト リ ー ミ ン グ通信 メ カ ニズ ム を提供 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 85 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス • XCL では、 キ ャ ッ シ ュ と 外部 メ モ リ コ ン ト ロ ー ラ の間にアービ ト レーシ ョ ン を使用 し た高速 ス ト リ ー ミ ン グ イ ン ターフ ェ イ ス を提供 • マ イ ク ロ プ ロ セ ッ サ デバ ッ グ モジ ュ ール (MDM) コ ア を使用 し たデバ ッ グ イ ン タ ーフ ェ イ ス • パフ ォーマ ン ス解析用の ト レース イ ン ターフ ェ イ ス MicroBlaze I/O の概要 図 2-1 お よ び表 2-1 に示す コ ア イ ン タ ーフ ェ イ ス は、 次の よ う に定義 さ れてい ます。 DPLB :デー タ イ ン タ ーフ ェ イ ス、 プ ロ セ ッ サ ロ ーカル バ ス DOPB : デー タ イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス DLMB : デー タ イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ) IPLB :命令 イ ン タ ーフ ェ イ ス、 プ ロ セ ッ サ ロ ーカル バ ス IOPB : 命令 イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス ILMB : 命令 イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ) MFSL 0..15 : FSL マ ス タ イ ン タ ーフ ェ イ ス DWFSL 0..15 :FSL マ ス タ 直接接続 イ ン タ ーフ ェ イ ス SFSL 0..15 : FSL ス レーブ イ ン タ ーフ ェ イ ス DRFSL 0..15 : FSL ス レーブ直接接続 イ ン タ ーフ ェ イ ス IXCL :命令側ザ イ リ ン ク ス CacheLink イ ン タ ーフ ェ イ ス (FSL マ ス タ / ス レーブ ペア ) DXCL :デー タ 側ザ イ リ ン ク ス CacheLink イ ン ターフ ェ イ ス (FSL マ ス タ / ス レーブ ペア ) コ ア : ク ロ ッ ク 、 リ セ ッ ト 、 デバ ッ グ、 ト レース用のその他の信号 命令側 バス イ ン タ ー フ ェ イ ス デー タ 側 バス イ ン タ ー フ ェ イ ス MMU (Memory Management Unit) UTLB ITLB IXCL_S デー タ キ ャ ッ シ ュ 命令キ ャ ッ シ ュ IXCL_M DTLB ALU プログラム カウン タ シフ ト 特殊用途 レジス タ バレル シ フ ト 乗算器 IPLB DXCL_M DXCL_S DPLB 除算器 IOPB バス IF ILMB FPU バス 命令 バッ フ ァ DOPB IF DLMB 命令 デコー ド MFSL 0..15 または レ ジ ス タ フ ァ イル 32 X 32b DWFSL 0..15 SFSL 0..15 ま たは オプ シ ョ ンの機能 DRFSL 0..15 図 2-1 : MicroBlaze コ アのブ ロ ッ ク 図 86 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) MicroBlaze I/O の概要 表 2-1 : MicroBlaze コ ア I/O のサマ リ インター フ ェ イス I/O DM_ABus[0:31] DOPB O デー タ イ ン タ ーフ ェ イ ス OPB ア ド レ ス バ ス DM_BE[0:3] DOPB O デー タ イ ン タ ーフ ェ イ ス OPB バ イ ト イ ネーブル DM_busLock DOPB O デー タ イ ン タ ーフ ェ イ ス OPB バ ス ロ ッ ク DM_DBus[0:31] DOPB O デー タ イ ン タ ーフ ェ イ ス OPB 書 き込みデー タ バ ス DM_request DOPB O デー タ イ ン タ ーフ ェ イ ス OPB バ ス要求 DM_RNW DOPB O デー タ イ ン タ ーフ ェ イ ス OPB 読み出 し 、 書 き込みは なし DM_select DOPB O デー タ イ ン タ ーフ ェ イ ス OPB セ レ ク ト DM_seqAddr DOPB O デー タ イ ン タ ーフ ェ イ ス OPB シーケ ン シ ャ ル アド レス DOPB_DBus[0:31] DOPB I デー タ イ ン タ ーフ ェ イ ス OPB 読み出 し デー タ バ ス DOPB_errAck DOPB I デー タ イ ン タ ーフ ェ イ ス OPB エ ラ ー通知 DOPB_MGrant DOPB I デー タ イ ン タ ーフ ェ イ ス OPB バ ス許可 DOPB_retry DOPB I デー タ イ ン タ ーフ ェ イ ス OPB バ ス サ イ ク ル再試行 DOPB_timeout DOPB I デー タ イ ン タ ーフ ェ イ ス OPB タ イ ム ア ウ ト エ ラ ー DOPB_xferAck DOPB I デー タ イ ン タ ーフ ェ イ ス OPB 転送 ACK 信号 IM_ABus[0:31] IOPB O 命令 イ ン タ ーフ ェ イ ス OPB ア ド レ ス バ ス IM_BE[0:3] IOPB O 命令 イ ン タ ーフ ェ イ ス OPB バ イ ト イ ネーブル IM_busLock IOPB O 命令 イ ン タ ーフ ェ イ ス OPB バ ス ロ ッ ク IM_DBus[0:31] IOPB O 命令 イ ン タ ーフ ェ イ ス OPB 書 き込みデー タ バ ス (常に 0x00000000) IM_request IOPB O 命令 イ ン タ ーフ ェ イ ス OPB バ ス要求 IM_RNW IOPB O 命令 イ ン タ ーフ ェ イ ス OPB 読み出 し 、 書 き込みはな し (IM_select に接続) IM_select IOPB O 命令 イ ン タ ーフ ェ イ ス OPB セ レ ク ト IM_seqAddr IOPB O 命令 イ ン タ ーフ ェ イ ス OPB シーケ ン シ ャ ル ア ド レ ス IOPB_DBus[0:31] IOPB I 命令 イ ン タ ーフ ェ イ ス OPB 読み出 し デー タ バ ス IOPB_errAck IOPB I 命令 イ ン タ ーフ ェ イ ス OPB エ ラ ー通知 IOPB_MGrant IOPB I 命令 イ ン タ ーフ ェ イ ス OPB バ ス許可 IOPB_retry IOPB I 命令 イ ン タ ーフ ェ イ ス OPB バ ス サ イ ク ル再試行 IOPB_timeout IOPB I 命令 イ ン タ ーフ ェ イ ス OPB タ イ ム ア ウ ト エ ラ ー IOPB_xferAck IOPB I 命令 イ ン タ ーフ ェ イ ス OPB 転送 ACK 信号 DPLB_M_ABort DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 中止バス要求 イ ン ジ ケー タ DPLB_M_ABus DPLB O デー タ イ ン タ ーフ ェ イ ス PLB ア ド レ ス バ ス DPLB_M_UABus DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 上位ア ド レ ス バ ス 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 説明 87 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き ) インター フ ェ イス I/O DPLB_M_BE DPLB O デー タ イ ン タ ーフ ェ イ ス PLB バ イ ト イ ネーブル DPLB_M_busLock DPLB O デー タ イ ン タ ーフ ェ イ ス PLB バス ロ ッ ク DPLB_M_lockErr DPLB O デー タ イ ン タ ーフ ェ イ ス PLB ロ ッ ク エ ラ ー イ ン ジ ケー タ DPLB_M_MSize DPLB O デー タ イ ン タ ーフ ェ イ ス PLB マ ス タ デー タ バ ス サイズ DPLB_M_priority DPLB O デー タ イ ン タ ーフ ェ イ ス PLB バス要求優先順位 DPLB_M_rdBurst DPLB O デー タ イ ン タ ーフ ェ イ ス PLB バース ト 読み出 し 転送 イ ン ジ ケー タ DPLB_M_request DPLB O デー タ イ ン タ ーフ ェ イ ス PLB バス 要求 DPLB_M_RNW DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 読み出 し 、 書き 込みは なし DPLB_M_size DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 転送サ イ ズ DPLB_M_TAttribute DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 転送属性バス DPLB_M_type DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 転送形式 DPLB_M_wrBurst DPLB O デー タ イ ン タ ーフ ェ イ ス PLB バース ト 書き 込み転送 イ ン ジ ケー タ DPLB_M_wrDBus DPLB O デー タ イ ン タ ーフ ェ イ ス PLB 書き 込みデー タ バ ス DPLB_MBusy DPLB I デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ ビ ジー イ ン ジ ケー タ DPLB_MRdErr DPLB I デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ読み出 し エ ラ ー イ ン ジ ケー タ DPLB_MWrErr DPLB I デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ書き 込み エ ラ ー イ ン ジ ケー タ DPLB_MIRQ DPLB I デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ割 り 込み イ ン ジ ケー タ DPLB_MWrBTerm DPLB I デー タ イ ン タ ーフ ェ イ ス PLB 終端書 き込みバース ト イ ン ジ ケー タ DPLB_MWrDAck DPLB I デー タ イ ン タ ーフ ェ イ ス PLB 書き 込みデー タ 応答 DPLB_MAddrAck DPLB I デー タ イ ン タ ーフ ェ イ ス PLB ア ド レ ス応答 DPLB_MRdBTerm DPLB I デー タ イ ン タ ーフ ェ イ ス PLB 終端読み出 し バース ト イ ン ジ ケー タ DPLB_MRdDAck DPLB I デー タ イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ 応答 DPLB_MRdDBus DPLB I デー タ イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ バ ス DPLB_MRdWdAddr DPLB I データ イ ン タ ーフ ェ イ ス PLB 読み出し ワ ード ア ド レス DPLB_MRearbitrate DPLB I デー タ イ ン タ ーフ ェ イ ス PLB バス 再アービ ト レー シ ョ ン イ ン ジ ケー タ DPLB_MSSize DPLB I デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ デー タ バ ス サイズ 信号 88 japan.xilinx.com 説明 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) MicroBlaze I/O の概要 表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き ) インター フ ェ イス I/O DPLB_MTimeout DPLB I デー タ イ ン タ ーフ ェ イ ス PLB バス タ イ ム ア ウ ト IPLB_M_ABort IPLB O 命令イ ン タ ーフ ェ イ ス PLB 中止バス 要求イ ン ジケ ータ IPLB_M_ABus IPLB O 命令 イ ン タ ーフ ェ イ ス PLB ア ド レ ス バス IPLB_M_UABus IPLB O 命令 イ ン タ ーフ ェ イ ス PLB 上位ア ド レ ス バス IPLB_M_BE IPLB O 命令 イ ン タ ーフ ェ イ ス PLB バ イ ト イ ネーブル IPLB_M_busLock IPLB O 命令 イ ン タ ーフ ェ イ ス PLB バ ス ロ ッ ク IPLB_M_lockErr IPLB O 命令イ ン タ ーフ ェ イ ス PLB ロ ッ ク エラ ー イ ン ジ ケ ータ IPLB_M_MSize IPLB O 命令イ ン タ ーフ ェ イ ス PLB マス タ データ バス サイ ズ IPLB_M_priority IPLB O 命令 イ ン タ ーフ ェ イ ス PLB バ ス要求優先順位 IPLB_M_rdBurst IPLB O 命令 イ ン タ ーフ ェ イ ス PLB バース ト 読み出 し 転送 イ ン ジ ケー タ IPLB_M_request IPLB O 命令 イ ン タ ーフ ェ イ ス PLB バ ス要求 IPLB_M_RNW IPLB O 命令イ ン タ ーフ ェ イ ス PLB 読み出し 、 書き 込みはなし IPLB_M_size IPLB O 命令 イ ン タ ーフ ェ イ ス PLB 転送サ イ ズ IPLB_M_TAttribute IPLB O 命令 イ ン タ ーフ ェ イ ス PLB 転送属性バ ス IPLB_M_type IPLB O 命令 イ ン タ ーフ ェ イ ス PLB 転送形式 IPLB_M_wrBurst IPLB O 命令 イ ン タ ーフ ェ イ ス PLB バース ト 書 き込み転送 イ ン ジ ケー タ IPLB_M_wrDBus IPLB O 命令 イ ン タ ーフ ェ イ ス PLB 書 き込みデー タ バス IPLB_MBusy IPLB I 命令 イ ン タ ーフ ェ イ ス PLB ス レーブ ビ ジー イ ン ジ ケー タ IPLB_MRdErr IPLB I 命令 イ ン タ ーフ ェ イ ス PLB ス レーブ読み出 し エ ラ ー イ ン ジ ケー タ IPLB_MWrErr IPLB I 命令 イ ン タ ーフ ェ イ ス PLB ス レーブ書 き込みエ ラ ー イ ン ジ ケー タ IPLB_MIRQ IPLB I 命令 イ ン タ ーフ ェ イ ス PLB ス レーブ割 り 込み イ ン ジ ケー タ IPLB_MWrBTerm IPLB I 命令 イ ン タ ーフ ェ イ ス PLB 終端書 き込みバース ト イ ン ジ ケー タ IPLB_MWrDAck IPLB I 命令 イ ン タ ーフ ェ イ ス PLB 書 き込みデー タ 応答 IPLB_MAddrAck IPLB I 命令 イ ン タ ーフ ェ イ ス PLB ア ド レ ス応答 IPLB_MRdBTerm IPLB I 命令 イ ン タ ーフ ェ イ ス PLB 終端読み出 し バース ト イ ン ジ ケー タ IPLB_MRdDAck IPLB I 命令 イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ 応答 IPLB_MRdDBus IPLB I 命令 イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ バス IPLB_MRdWdAddr IPLB I 命令 イ ン タ ーフ ェ イ ス PLB 読み出 し ワ ー ド ア ド レ ス IPLB_MRearbitrate IPLB I 命令 イ ン タ ーフ ェ イ ス PLB バ ス再アービ ト レーシ ョ ン イ ン ジ ケー タ 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 説明 89 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き ) インター フ ェ イス I/O IPLB_MSSize IPLB I 命令 イ ン タ ーフ ェ イ ス PLB ス レーブ デー タ バ ス サイズ IPLB_MTimeout IPLB I 命令 イ ン タ ーフ ェ イ ス PLB バ ス タ イ ム ア ウ ト 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 デー タ Ready Instr_Addr[0:31] ILMB O 命令 イ ン タ ーフ ェ イ ス LMB ア ド レ ス バ ス I_AS ILMB O 命令 イ ン タ ーフ ェ イ ス LMB ア ド レ ス ス ト ロ ーブ IFetch ILMB O 命令 イ ン タ ーフ ェ イ ス LMB 命令フ ェ ッ チ Instr[0:31] ILMB I 命令 イ ン タ ーフ ェ イ ス LMB 読み出 し デー タ バ ス IReady ILMB I 命令 イ ン タ ーフ ェ イ ス LMB デー タ Ready FSL0_M .. FSL15_M MFSL O 出力 FSL チ ャ ネルへのマ ス タ イ ン タ ーフ ェ イ ス 信号 ま たは MFSL は FSL バス 接続に、 DWFSL は FSL ス レーブ DWFSL FSL0_S .. FSL15_S SFSL 説明 と の直接接続に使用 さ れます。 I ま たは 入力 FSL チ ャ ネルへの ス レーブ イ ン タ ーフ ェ イ ス SFSL は FSL バ ス接続に、DRFSL は FSL マ ス タ と の DRFSL 直接接続に使用 さ れます。 ICache_FSL_in... IXCL_S IO 命令側 CacheLink FSL ス レーブ イ ン タ ーフ ェ イ ス ICache_FSL_out... IXCL_M IO 命令側 CacheLink FSL マ ス タ イ ン タ ーフ ェ イ ス DCache_FSL_in... DXCL_S IO デー タ 側 CacheLink FSL ス レーブ イ ン タ ーフ ェ イ ス DCache_FSL_out... DXCL_M IO デー タ 側 CacheLink FSL マ ス タ イ ン タ ーフ ェ イ ス Interrupt コア I 割 り 込み Reset1 コア I コ ア リ セ ッ ト 、 ア ク テ ィ ブ High。 1 Clk ク ロ ッ ク サ イ ク ル以上保持す る必要あ り 。 Mb_Reset1 コア I コ ア リ セ ッ ト 、 ア ク テ ィ ブ High。 1 Clk ク ロ ッ ク サ イ ク ル以上保持す る必要あ り 。 Clk コア I ク ロ ッ ク2 Ext_BRK コア I MDM か ら の BREAK 信号 Ext_NM_BRK コア I MDM か ら のマ ス ク 不可の BREAK 信号 MB_Halted コア O デバ ッ グ イ ン タ ーフ ェ イ ス を介 し た、 ま たは Dbg_Stop の設定に よ る パ イ プ ラ イ ン停止 90 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) プ ロ セ ッ サ ロー カル バス (PLB) イ ン タ ー フ ェ イ ス 表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き ) インター フ ェ イス I/O 説明 Dbg_Stop コア I 無条件でパ イ プ ラ イ ン を停止 し ます。 立ち上が り エ ッ ジの検出パルスは最低 Clk ク ロ ッ ク サ イ ク ル間 保持する 必要あ り 。 C_DEBUG_ENABLED が 1 に 設定 さ れ る と き のみ影響を受け ます。 Dbg_... コア IO Trace_... コア O 信号 MDM か ら のデバ ッ グ信号 (表 2-9 参照) リ アル タ イ ム ハー ド ウ ェ ア解析用の ト レース信号 (表 2-10 参照) 1. Reset 信号お よ び Mb_Reset 信号の働 き は同 じ ですが、 Reset は主に OPB イ ン タ ー フ ェ イ ス で、 Mb_Reset は PLB イ ン タ ーフ ェ イ ス で使用 さ れ ま す。 2. MicroBlaze is のデザ イ ンは Clk 信号に同期 し ま す。 ただ し 、 ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク は Dbg_Clk 信号に同期 し ま す。 ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク が使用 さ れない場合は Clk 信号には最小周波数の制限 はあ り ま せん。 使用 さ れ る 場合は こ れ ら の ク ロ ッ ク 領域間で信号が送信 さ れ ま すが、 Clk 信号の周波数を Dbg_Clk の周波数 よ り も 高 く す る 必要があ り ます。 プ ロ セ ッ サ ロー カル バス (PLB) イ ン タ ー フ ェ イ ス MicroBlaze の PLB イ ン フ ァ ーフ ェ イ スは、バ イ ト イ ネーブルが可能な 32 ビ ッ ト のマ ス タ と し て イ ンプ リ メ ン ト さ れてい ます。詳細は、『IBM 128-Bit Processor Local Bus Architectural Specification (v4.6)』 を参照 し て く だ さ い。 オン チ ッ プ ペ リ フ ェ ラル バス (OPB) イ ン タ ー フ ェ イ ス MicroBlaze の OPB イ ン タ ーフ ェ イ ス は、 バイ ト イ ネーブルが可能な マス タ と し てイ ン プリ メ ン ト さ れて いま す。 詳細は、『 OPB Usage in Xilinx FPGA』 を 参照し てく ださ い。 ロー カル メ モ リ バス (LMB) イ ン タ ー フ ェ イ ス LMB は、主にオンチ ッ プ ブ ロ ッ ク RAM にア ク セ スする ために使用する 同期バス です。 こ のバ ス で は、最小数の制御信号 と 単純なプ ロ ト コ ルを 1 個使用 し て、 ロ ーカル ブ ロ ッ ク RAM に 1 ク ロ ッ ク サ イ ク ルでア ク セ ス で き ます。 LMB の信号 と その定義を次の表に示 し ます。 LMB 信号はすべてア ク テ ィ ブ High です。 LMB 信号のイ ン タ ー フ ェ イ ス 表 2-2 : 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 書き 込みデー タ バ ス AS D_AS I_AS O ア ド レ ス ス ト ロ ーブ Read_Strobe Read_Strobe IFetch O 読み出 し 中 Write_Strobe Write_Strobe 未使用 O 書き 込み中 信号 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 説明 91 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-2 : LMB バスの信号 デー タ イ ン ターフ ェ イス 命令 イン ターフ ェ イス タ イプ Data_Read[0:31] Data_Read[0:31] Instr[0:31] I 読み出 し デー タ バ ス Ready DReady IReady I 次の転送の準備完了 Clk Clk Clk I バス ク ロ ッ ク 信号 説明 Addr[0:31] ア ド レ ス バ ス は コ アの出力で、 現在の転送に よ り ア ク セ ス さ れてい る メ モ リ ア ド レ ス を示 し ます。 こ のバ スは AS が High の と き のみ有効です。複数の ク ロ ッ ク サ イ ク ルが必要 と な る ア ク セ ス では、 Addr[0:31] はその転送の最初の ク ロ ッ ク サ イ ク ルでのみ有効です。 Byte_Enable[0:3] バ イ ト イ ネーブル信号は コ アの出力で、 有効なデー タ を含むデー タ バ ス のバ イ ト レーン を示 し ま す。 Byte_Enable[0:3] は、 AS が High の と き のみ有効です。複数の ク ロ ッ ク サ イ ク ルが必要 と な る ア ク セ ス では、Byte_Enable[0:3] はその転送の最初の ク ロ ッ ク サ イ ク ルでのみ有効です。 次の表に、 Byte_Enable[0:3] の有効な値を示 し ます。 表 2-3 : Byte_Enable[0:3] での有効値 使用 さ れるバイ ト レーン Byte_Enable[0:3] Data[0:7] Data[8:15] Data[16:23] Data[24:31] 0000 0001 x 0010 x 0100 1000 x x 0011 1100 x x 1111 x x x x x x Data_Write[0:31] 書 き 込みデー タ バ ス は コ アの出力で、 メ モ リ に書 き込まれ るデー タ が含まれています。 こ のバ スは AS が High の と き にのみ有効です。 Byte_Enable[0:3] で指定 さ れ る バ イ ト レーンにのみ有効な デー タ が含まれてい ます。 AS ア ド レ ス ス ト ローブは コ アの出力で、転送の開始を示 し 、ア ド レ ス バ スお よ びバ イ ト イ ネーブルを 有効に し ます。 こ の ス ト ロ ーブは、転送の最初の ク ロ ッ ク サ イ ク ルでのみ High にな り 、その後次の 転送の開始ま で Low にな り ます。 Read_Strobe 読み出 し ス ト ロ ーブは コ アの出力で、読み出 し 転送が進行中であ る こ と を示 し ます。 こ の信号は、転 送の最初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク ル 92 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ロー カル メ モ リ バス (LMB) イ ン タ ー フ ェ イ ス ま で High の ま ま にな る場合があ り ます。 次の ク ロ ッ ク サ イ ク ルで新た な読み出 し 転送が直接開始 さ れ る 場合は、 Read_Strobe は High の ま ま にな り ます。 Write_Strobe 書 き 込みス ト ロ ーブは コ アの出力で、書 き込み転送が進行中であ る こ と を示 し ます。 こ の信号は、転 送の最初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク ル ま で High の ま ま にな る場合があ り ます。 次の ク ロ ッ ク サ イ ク ルで新た な書 き込み転送が直接開始 さ れ る 場合は、 Write_Strobe は High の ま ま にな り ます。 Data_Read[0:31] 読み出 し バ ス は コ アへの入力で、 メ モ リ か ら 読み出 さ れたデー タ を含みます。 Data_Read[0:31] は、 Ready 信号が High の と き の ク ロ ッ ク の立ち上が り エ ッ ジで有効です。 Ready Ready 信号はコ アへの入力で、現在の転送が完了し 、次のク ロ ッ ク サイ ク ルで次の転送が開始可能で あ る こ と を 示し ま す。 こ の信号は、 ク ロ ッ ク の立ち上がり エッ ジでサン プリ ン グ さ れま す。 読み出し では、こ の信号は Data_Read[0:31] バス が有効であ る こ と を 示し 、書き 込みでは Data_Write[0:31] バ ス がロ ーカ ル メ モリ に書き 込ま れたこ と を 示し ま す。 Clk LMB での動作は、 すべて MicroBlaze コ アの ク ロ ッ ク に同期 し てい ます。 LMB ト ラ ンザ ク シ ョ ン 次に LMB バ ス の動作の例を示 し ます。 一般的な書き込み動作 Clk Addr A0 Byte_Enable 1111 Data_Write D0 AS Read_Strobe Write_Strobe Data_Read Ready 図 2-2 : LMB での一般的な書き込み動作 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 93 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 一般的な読み出 し 動作 Clk Addr A0 Byte_Enable 1111 Data_Write AS Read_Strobe Write_Strobe Data_Read D0 Ready 図 2-3 : LMB の一般的な読み出 し 動作 連続書き込み動作 Clk Addr A0 A1 A2 Byte_Enable BE0 BE1 BE2 Data_Write AS Read_Strobe Write_Strobe Data_Read Ready 図 2-4 : LMB での連続書き込み動作 1 サイ ク ルの連続読み出 し 動作 Clk Addr A0 A1 A2 Byte_Enable BE0 BE1 BE2 D0 D1 Data_Write AS Read_Strobe Write_Strobe Data_Read D2 Ready 図 2-5 : LMB での 1 サイ ク ルの連続読み出 し 動作 94 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ロー カル メ モ リ バス (LMB) イ ン タ ー フ ェ イ ス 読み出 し /書き込み混合の連続動作 Clk Addr A0 A1 Byte_Enable BE0 BE1 Data_Write D0 AS Read_Strobe Write_Strobe Data_Read D1 Ready 図 2-6 : 読み出 し /書き込み混合の連続動作 デー タ の読み出 し および書き込み操作 MicroBlaze のデー タ 側のバ ス イ ン タ ーフ ェ イ ス では、 次の転送を サポー ト す る のに必要 と な る 読 み出 し 操作お よ び書 き 込み操作が実行 さ れます。 • ワ ー ド デバ イ スへのバ イ ト 、 ハーフ ワー ド 、 ワー ド 転送 • ハーフ ワ ー ド デバ イ スへのバ イ ト 、 ハーフ ワー ド 転送 • バ イ ト デバ イ スへのバ イ ト 転送 MicroBlaze では、 指定デバ イ ス の転送サ イ ズ を超え る転送はサポー ト さ れていません。 こ れ ら の転 送では、 MicroBlaze バ ス イ ン タ ーフ ェ イ ス でサポー ト さ れていないダ イ ナ ミ ッ ク バ ス サ イ ジ ン グ お よ び変換サ イ ク ルが必要 と な り ます。 読み出 し サ イ ク ルに対す るデー タ 操作を表 2-4 に、 書 き 込 みサ イ ク ルに対す る デー タ 操作を表 2-5 に示 し ます。 表 2-4 : 読み出 し デー タ の操作 ( レ ジ ス タ rD への読み込み) レ ジ ス タ rD デー タ [30:31] Byte_Enable [0:3] 転送サイ ズ 11 0001 バイ ト Byte3 10 0010 バイ ト Byte2 01 0100 バイ ト Byte1 00 1000 バイ ト Byte0 10 0011 ハーフ ワー ド Byte2 Byte3 00 1100 ハーフ ワー ド Byte0 Byte1 00 1111 ワー ド Byte2 Byte3 ア ド レス MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com rD[0:7] Byte0 rD[8:15] Byte1 rD[16:23] rD[24:31] 95 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-5 : 書き込みデー タ の操作 ( レ ジ ス タ rD から の格納) 書き込みデー タ バスのバイ ト ア ド レ ス Byte_Enable 転送サイ ズ [30:31] [0:3] 11 0001 バイ ト 10 0010 バイ ト 01 0100 バイ ト 00 1000 バイ ト 10 0011 ハーフ ワ ー ド 00 1100 ハーフ ワ ー ド 00 1111 ワー ド Byte0 Byte1 Byte2 Byte3 rD[24:31] rD[24:31] rD[24:31] rD[24:31] rD[16:23] rD[24:31] rD[0:7] rD[8:15] rD[16:23] rD[24:31] rD[16:23] rD[24:31] メ モ : その他の OPB マ ス タ では、MicroBlaze で許容 さ れ る バ イ ト レーン配置での要件 よ り も 制限 が多い可能性があ り ます。 OPB の ス レーブ デバ イ ス は、 通常最上位のバ イ ト レーンに接続 さ れて い る バ イ ト デバ イ スお よ び最上位のハーフ ワ ー ド レーンに接続 さ れてい る ハーフ ワ ー ド デバ イ ス に、 左揃えで接続 さ れてい ます。 MicroBlaze の操作 ロ ジ ッ ク では、 こ の接続方法が完全にサポー ト さ れてい ます。 高速シ ン プ レ ッ ク ス リ ン ク (FSL) イ ン タ ー フ ェ イ ス FSL バ ス では、出力 FIFO と 入力 FIFO 間のポ イ ン ト ツー ポ イ ン ト 通信が可能です。 ジ ェ ネ リ ッ ク FSL プ ロ ト コ ルの詳細は、 ザ イ リ ン ク ス EDK IP の資料の デー タ シー ト (DS449) 『Fast Simplex Link (FSL) Bus』 を参照 し て く だ さ い。 マス タ FSL 信号のイ ン タ ー フ ェ イ ス MicroBlaze では、 16 個ま でのマ ス タ FSL イ ン タ ーフ ェ イ ス を使用で き ます。 マ ス タ 信号を表 2-6 に示 し ます。 表 2-6 : マス タ FSL 信号 信号名 96 説明 VHDL の型 方向 FSLn_M_Clk クロック std_logic 入力 FSLn_M_Write デー タ が出力 FSL に書 き込まれてい る こ と を示す ラ イ ト イ ネーブル信号 std_logic 出力 FSLn_M_Data 出力 FSL に書き 込まれ る デー タ 値 std_logic_vector 出力 FSLn_M_Control 出力 FSL に書き 込まれ る 制御ビ ッ ト 値 std_logic 出力 FSLn_M_Full 出力 FIFO が フルであ る こ と を示すフル ビッ ト std_logic 入力 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 高速シ ン プ レ ッ ク ス リ ン ク (FSL) イ ン タ ー フ ェ イ ス ス レ ーブ FSL 信号のイ ン タ ー フ ェ イ ス MicroBlaze では、16 個ま での ス レーブ FSL イ ン タ ーフ ェ イ ス を使用で き ます。 ス レーブ FSL イ ン タ ーフ ェ イ ス信号を表 2-7 に示 し ます。 表 2-7 : ス レーブ FSL 信号 信号名 説明 VHDL の型 方向 FSLn_S_Clk クロック std_logic 入力 FSLn_S_Read デー タ が入力 FSL か ら 読み出 さ れてい る こ と を示す読み出 し ACK 信号 std_logic 出力 FSLn_S_Data 入力 FSL の一番上で現在読み 出 し 可能なデー タ 値 std_logic_vector 入力 FSLn_S_Control 入力 FSL の一番上で現在読み 出 し 可能な制御ビ ッ ト 値 std_logic 入力 FSLn_S_Exists 入力 FSL にデー タ が存在す る こ と を示すフ ラ グ std_logic 入力 FSL ト ラ ンザ ク シ ョ ン FSL バス書き込み動作 MicroBlaze に よ る FSL バスへの書き 込みは、 put 命令ま たは putd 命令の 1 つを使用 し て実行 さ れ ます。 書 き 込みでは、 レ ジ ス タ の内容が出力 FSL に転送 さ れます。 こ の転送は通常、 FSL FIFO が フルにな ら なければ、 ブ ロ ッ キ ン グ モー ド の書 き込み (put お よ び cput 命令) では 1 ク ロ ッ ク サ イ ク ルで完了 し ます。 FSL FIFO が フルにな る と 、FSL フル フ ラ グが Low にな る ま でプ ロ セ ッ サが ス ト ール し ます。 接頭辞が n の ノ ンブ ロ ッ キ ン グ命令では、 FSL が フルで も 、 転送は 1 ク ロ ッ ク サ イ ク ルで完了 し ます。 FSL が フルの場合、書 き 込みは実行 さ れず、MSR のキ ャ リ ー ビ ッ ト が設定 さ れ ます。 FSL バス読み出 し 動作 MicroBlaze に よ る FSL バス か ら の読み出 し は、 get 命令ま たは getd 命令の 1 つを使用 し て実行 さ れます。 読み出 し が実行 さ れ る と 、 入力 FSL の内容が汎用レ ジ ス タ に転送 さ れます。 こ の転送は通 常、 FSL FIFO にデー タ が存在すれば、 ブ ロ ッ キ ン グ モー ド の読み出 し では 2 ク ロ ッ ク サ イ ク ルで 完了 し ます。 FSL FIFO が空にな る と 、FSL にデー タ が存在す る こ と を示すフ ラ グが High にな る ま でプ ロ セ ッ サが こ の命令で ス ト ール し ます。 接頭辞が n の ノ ンブ ロ ッ キ ン グ モー ド 命令では、 FSL が空であ る か ど う かにかかわ ら ず、 転送は 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 FSL が空の場合、 デー タ 転送は実行 さ れず、 MSR のキ ャ リ ー ビ ッ ト が設定 さ れます。 直接 FSL 接続 直接 FSL 接続を使用す る と 、 FSL バス を使用する 必要がな く な り ます。 直接接続には FSL バ ス FIFO が含まれないため、 2 つの接続 さ れた IP コ ア間にバ ッ フ ァ を必要 と し ない場合に有用です。 バ ッ フ ァ を使用 し なければ、通信レ イ テ ン シお よ び必要な イ ンプ リ メ ン テーシ ョ ン リ ソ ース が削減 さ れます。 各 MicroBlaze FSL イ ン タ ーフ ェ イ ス で、直接 FSL 接続ま たは FSL バス のいずれかを 使用でき ま す。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 97 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス MicroBlaze DWFSL イ ン タ ーフ ェ イ ス は直接 FSL 接続上の イ ニシエー タ で、 DWFSL タ ーゲ ッ ト にのみ接続で き ます。 DWFSL イ ニ シエー タ と タ ーゲ ッ ト の信号は同名で、表 2-6 に示 さ れ る MFSL 信号 と 同一です。 MicroBlaze では DWFSL イ ン タ ーフ ェ イ ス を使用 し て、put ま たは putd 命令のい ずれかでデー タ を タ ーゲ ッ ト に書 き込みます。 MicroBlaze DRFSL イ ン ターフ ェ イ ス は直接 FSL 接続上の タ ーゲ ッ ト で、 DRFSL イ ニ シエー タ に のみ接続で き ます。 DRFSL イ ニシエー タ と タ ーゲ ッ ト の信号は同名で、表 2-7 に示 さ れ る SFSL 信 号 と 同一です。 MicroBlaze では DRFSL イ ン タ ーフ ェ イ ス を使用 し て、 get 命令ま たは getd 命令の いずれかでデー タ を イ ニ シエー タ か ら 読み出 し ます。 XCL (ザ イ リ ン ク ス CacheLink) イ ン タ ーフ ェ イ スは直接 FSL 接続を使用 し て イ ンプ リ メ ン ト さ れ ます。 98 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス ザ イ リ ン ク ス CacheLink (XCL) は、 外部 メ モ リ にア ク セ スす る ためのハ イ パフ ォーマン ス ソ リ ュ ーシ ョ ンです。 CacheLink イ ン タ ーフ ェ イ ス は、 MPMC な ど の統合 FSL バ ッ フ ァ を使用 し て メ モ リ コ ン ト ロー ラ に直接接続す る よ う に設計 さ れてい ます。 こ の方法を使用す る と イ ン ス タ ン シ エーシ ョ ン数 も 最少にな り 、 レ イ テ ン シが最短にな り ます (図 2-7 を参照)。 回路図 MHS コ ー ド 例 BEGIN microblaze ... BUS_INTERFACE IXCL = myIXCL ... END FSL FSL メモリ コ ン ト ロー ラ BEGIN mch_opb_sdram ... BUS_INTERFACE MCH0 = myIXCL ... END MicroBlaze 図 2-7 : 統合 FSL バ ッ フ ァ を使用 し た CacheLink の接続 (命令キ ャ ッ シ ュのみを使用) こ のイ ン タ ーフ ェ イ ス は、 キャ ッ シュ を イ ネーブルにし たと き のみ使用可能です。 命令側ま たはデー タ 側のいずれか一方のみに CacheLink のキャ ッ シュ を 使用する こ と も でき ま す。 メ モ リ ロ ケーシ ョ ンのア ク セ ス方法は、 命令キ ャ ッ シ ュ ではパ ラ メ ー タ C_ICACHE_ALWAYS_ USED、 データ キャ ッ シュ ではパラ メ ータ C_DCACHE_ALWAYS_USED によ っ て決ま り ま す。 パ ラ メ ータ が 1 に設定さ れている 場合は、キャ ッ シュ 可能な範囲内のメ モリ は常に CacheLink を 介し て アク セス さ れ、0 に設定さ れている 場合は、ソ フ ト ウ ェ アでオフ に設定さ れている 場合 (MSR[DCE]=0 ま たは MSR[ICE]=0) に、 PLB ま たは OPB を使用 し てア ク セ ス さ れます。 キ ャ ッ シ ュ 可能な範囲外の メ モ リ ロ ケーシ ョ ンは、PLB、OPB ま たは LMB を使用 し てア ク セ ス さ れます。 CacheLink キ ャ ッ シ ュ コ ン ト ロ ー ラ では、選択 さ れてい る プ ロ ト コ ルに よ り 、 ク リ テ ィ カル ワ ー ド フ ァ ース ト ま たは リ ニ ア フ ェ ッ チを使用 し て、 4 ま たは 8 キ ャ ッ シ ュ ラ イ ンが処理 さ れます。 ま た、 キ ャ ッ シ ュ へのア ク セ ス に PLB ま たは OPB バ ス を使用 し ないため、 キ ャ ッ シ ュ 以外の メ モ リ ア ク セ ス の競合が減少 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 99 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス CacheLink 信号のイ ン タ ー フ ェ イ ス MicroBlaze の CacheLink 信号を表 2-8 に示 し ます。 表 2-8 : MicroBlaze の CacheLink 信号 信号名 100 説明 VHDL の型 方向 ICACHE_FSL_IN_Clk 命令側戻 り 読み出 し デー タ FSL への ク ロ ッ ク 出力 std_logic 出力 ICACHE_FSL_IN_Read 命令側戻 り 読み出 し デー タ FSL への読み出 し 信号 std_logic 出力 ICACHE_FSL_IN_Data 命令側戻 り 読み出 し デー タ FSL か ら の読み出 し デー タ std_logic_vector (0 ~ 31) 入力 ICACHE_FSL_IN_Control 命令側戻 り 読み出 し デー タ FSL か ら の FSL 制御ビ ッ ト (将来の 使用に予約) std_logic 入力 ICACHE_FSL_IN_Exists 命令側戻 り FSL に読み出 し デー タ が存在 std_logic 入力 ICACHE_FSL_OUT_Clk 命令側読み出 し ア ク セ ス FSL へ の ク ロ ッ ク 出力 std_logic 出力 ICACHE_FSL_OUT_Write 命令側読み出 し ア ク セ ス FSL に 新規キ ャ ッ シ ュ ミ ス ア ク セ ス 要求を書 き込み std_logic 出力 ICACHE_FSL_OUT_Data 命令側読み出 し ア ク セ ス FSL の 新規キ ャ ッ シ ュ ミ ス ア ク セ ス (ア ド レ ス ) std_logic_vector (0 ~ 31) 出力 ICACHE_FSL_OUT_Control 命令側読み出 し ア ク セ ス FSL へ の FSL 制御ビ ッ ト (将来の使用 に予約) std_logic 出力 ICACHE_FSL_OUT_Full 命令側読み出 し ア ク セ ス 用の FSL ア ク セ ス バ ッ フ ァ はフル std_logic 入力 DCACHE_FSL_IN_Clk デー タ 側戻 り 読み出 し デー タ FSL への ク ロ ッ ク 出力 std_logic 出力 DCACHE_FSL_IN_Read デー タ 側戻 り 読み出 し デー タ FSL への読み出 し 信号 std_logic 出力 DCACHE_FSL_IN_Data デー タ 側戻 り 読み出 し デー タ FSL か ら の読み出 し デー タ std_logic_vector (0 ~ 31) 入力 DCACHE_FSL_IN_Control デー タ 側戻 り 読み出 し デー タ FSL か ら の FSL 制御ビ ッ ト std_logic 入力 DCACHE_FSL_IN_Exists デー タ 側戻 り FSL に読み出 し デー タ が存在 std_logic 入力 DCACHE_FSL_OUT_Clk デー タ 側読み出 し ア ク セ ス FSL への ク ロ ッ ク 出力 std_logic 出力 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス 表 2-8 : MicroBlaze の CacheLink 信号 (続き ) 信号名 説明 VHDL の型 方向 DCACHE_FSL_OUT_Write デー タ 側読み出 し ア ク セ ス FSL に新規キ ャ ッ シ ュ ミ ス ア ク セ ス 要求を書 き込み std_logic 出力 DCACHE_FSL_OUT_Data デー タ 側読み出 し ア ク セ ス FSL へのキ ャ ッ シ ュ ミ ス ア ク セ ス (読み出 し ア ド レ ス ま たは書 き 込みア ド レ ス + 書 き込みデー タ + バ イ ト ラ イ ト イ ネーブル + バース ト 書 き込みエン コー ド ) std_logic_vector (0 ~ 31) 出力 DCACHE_FSL_OUT_Control デー タ 側読み出 し ア ク セ ス FSL への FSL 制御ビ ッ ト 。 読み出 し / 書 き込み、バ イ ト イ ネーブル、お よ びバー ス ト 書 き 込みエ ン コ ー ド 用のア ド レ ス ビ ッ ト [30 ~ std_logic 出力 std_logic 入力 31] DCACHE_FSL_OUT_Full デー タ 側読み出 し ア ク セ ス 用の FSL ア ク セ ス バ ッ フ ァ はフル CacheLink ト ラ ンザ ク シ ョ ン すべての CacheLink ア ク セ ス は、 FSL FIFO ベース の ト ラ ンザ ク シ ョ ン プ ロ ト コ ルに従い ます。 • ア ク セ ス情報は、 FSL デー タお よび制御信号 (DCACHE_FSL_OUT_Data、 DCACHE_FSL_ OUT_Control、 ICACHE_FSL_IN_Data、 お よ び ICACHE_FSL_IN_Control な ど ) を介 し てエ ン コ ー ド さ れます。 • 情報は、ラ イ ト イ ネーブル信号 (DCACHE_FSL_OUT_Write な ど ) が High にな る と 送信ま た は保存 さ れます。 • 書 き 込みは、フル信号が非ア ク テ ィ ブ (DCACHE_FSL_OUT_Full = 0 な ど ) の場合にのみ可能 です。 こ の フル信号は、 命令キ ャ ッ シ ュ コ ン ト ロー ラ では使用 さ れません。 • ICACHE_FSL_IN_Read お よ び DCACHE_FSL_IN_Read の使用はど の イ ン タ ーフ ェ イ ス プ ロ ト コ ルが選択 さ れてい る かに よ っ て決ま り ます。 ♦ ♦ IXCL およ び DXCL プロ ト コ ルが選択さ れている 場合、 読み出し 信号を High にする と 情報 が受信さ れ ( 読み込ま れ ) ま す。 送信側が新し いデータ がある こ と を 通知する と き 以外、 信 号は Low です。 IXCL2 およ び DXCL2 プロ ト コ ルが選択さ れている 場合、 読み出し 信号が Low になる と 、 受信側が新し いデータ を 受信でき ないこ と を 示し ま す。 読み出し 信号が High の場合にの み、 新し いデータ は読み込ま れ、 送信側はデータ が存在する こ と を 通知し ま す。 • 読み出し は、新し いデータ が存在する (ICACHE_FSL_IN_Exists = 1 など ) 場合にのみ可能です。 ジ ェ ネ リ ッ ク FSL プ ロ ト コ ルの詳細は、 ザ イ リ ン ク ス EDK IP の資料の デー タ シー ト (DS449) 『Fast Simplex Link (FSL) Bus』 を参照 し て く だ さ い。 CacheLink では、 キ ャ ッ シ ュ コ ン ト ロ ール 1 つに対 し て受信 ( ス レーブ) FSL と 送信 ( マ ス タ ) FSL が 1 つずつ使用 さ れます。 送信 FSL は ア ク セ ス要求を送信す る のに使用 さ れ、 受信 FSL は要求 さ れた キ ャ ッ シ ュ ラ イ ン を受信す る のに使用 さ れます。 ま た、 CacheLink では、 ト ラ ンザ ク シ ョ ン情 報に対 し て、 FSL デー タお よび制御信号を介 し た特定のエン コー ド 手法が使用 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 101 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス CacheLink プ ロ ト コ ルでの読み出 し に使用 さ れ る キ ャ ッ シ ュ ラ イ ンの長 さ は 4 ま たは 8 ワ ー ド で す。 各キ ャ ッ シ ュ ラ イ ンは ク リ テ ィ カル ワ ー ド フ ァ ース ト で フ ェ ッ チ さ れ る か、 ま たは リ ニ アに フ ェ ッ チ さ れますが、 こ れは、 ど の イ ン タ ーフ ェ イ ス プ ロ ト コ ルが選択 さ れてい る かに よ り ます。 • ク リ テ ィ カル ワー ド フ ァ ース ト は、 IXCL お よ び DXCL プ ロ ト コ ルで使用 さ れ、 C_ICACHE_INTERFACE = 0 お よび C_DCACHE_INTERFACE = 0 と それぞれ指定 さ れて い る 場合に選択 さ れます。 各キ ャ ッ シ ュ ラ イ ンは、 ク リ テ ィ カル ワ ー ド か ら 始ま り ます。 つ ま り 、 ア ド レ ス 0x348 へのア ク セ ス が 4 ワー ド キ ャ ッ シ ュ ラ イ ンの ミ ス であ っ た場合、 戻 り キ ャ ッ シ ュ ラ イ ンのア ド レ ス シーケ ン スは、 0x348、 0x34c、 0x340、 0x344 と な り ます。 キ ャ ッ シ ュ コ ン ト ロー ラ に よ り 、 最初の ワー ド が実行ユニ ッ ト に送信 さ れ、 キ ャ ッ シ ュ メ モ リ に も 保存 さ れます。 こ れに よ り 、 最初の ワ ー ド が戻 る と 同時に実行が再開 し ます。 その後、 キ ャ ッ シ ュ ラ イ ンに残 り の 3 つま たは 7 つの ワー ド が保存 さ れます。 • リ ニ ア フ ェ ッ チは、 IXCL2 お よび DXCL2 プ ロ ト コ ルで使用 さ れ、 C_ICACHE_INTERFACE = 1 お よび C_DCACHE_INTERFACE = 1 と それぞれ指定 さ れて い る 場合に選択 さ れます。 CacheLink のア ド レ ス出力は、 キ ャ ッ シ ュ ラ イ ン サ イ ズに調整 さ れます。 つま り 、 ア ド レ ス 0x348 へのア ク セ スは、 4 ワ ー ド のキ ャ ッ シ ュ ラ イ ンで ミ ス と な り 、 CacheLink のア ド レ ス出力が 0x340 と な り ます。 キ ャ ッ シ ュ コ ン ト ロ ー ラ は、 キ ャ ッ シ ュ メ モ リ にデー タ を保存 し 、 要求 さ れた ワー ド を実行ユニ ッ ト に随時転送 し ます。 パ ラ メ ー タ C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る場合、 書き 込み操作は、 バー ス ト 書 き 込みお よ びシ ン グル ワー ド を使用 し て、 キ ャ ッ シ ュ ラ イ ン全体を保存す る こ と がで き ま す。各キ ャ ッ シ ュ ラ イ ンは常に リ ニアに保存 さ れ、CacheLink のア ド レ ス出力はキ ャ ッ シ ュ ラ イ ン サ イ ズに調整 さ れます。パ ラ メ ー タ C_DCACHE_USE_WRITEBACK が 0 に設定 さ れてい る場合、 CacheLink のすべての書 き込み操作はシ ン グル ワ ー ド に よ る も のです。ラ イ ト バ ッ ク が使用 さ れて い る 場合、 バース ト 書 き込みは DXCL2 プ ロ ト コ ルでのみ使用可能なので、 C_DCACHE _INTERFACE は 1 に設定す る必要があ り ます。 命令キ ャ ッ シ ュの読み出 し ミ ス 読み出 し ミ ス が発生す る と 、 キ ャ ッ シ ュ コ ン ト ロー ラ は次のシーケ ン ス を実行 し ます。 1. 制御ビ ッ ト を Low (ICACHE_FSL_OUT_Control = 0) に設定 し て読み出 し ア ク セ ス を示 し 、 ワ ー ド を揃えた (1) ま たはキ ャ ッ シ ュ ラ イ ンでそ ろ え た ミ ス ア ド レ ス を ICACHE_FSL_OUT _Data に書 き 込みます。 2. デー タ が存在す る こ と を示す ICACHE_FSL_IN_Exists が High にな る ま で待機 し ます。 メ モ : ICACHE_FSL_IN_Exists が High にな る 前に、 少な く と も 1 ク ロ ッ ク サ イ ク ル間 wait 状態 であ る 必要があ り ます。 IXCL プ ロ ト コ ル ( ク リ テ ィ カル ワー ド フ ァ ース ト ) 3. ICACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。 4. ク リ テ ィ カル ワー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。 5. キ ャ ッ シ ュ ラ イ ンの残 り の 3 ワ ー ド に対 し 、 手順 3 ~ 4 を繰 り 返 し ます。 IXCL2 プ ロ ト コ ル ( リ ニ ア フ ェ ッ チ) 3. ICACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。 4. 関連ワ ー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。 5. ICACHE_FSL_IN_Data か ら の残 り の ワー ド を キ ャ ッ シ ュ に保存 し ます。 1. バ イ ト お よ びハーフ ワ ー ド の読み出 し ミ ス では、 完全な ワ ー ド が返 さ れ、 キ ャ ッ シ ュ コ ン ト ロ ー ラ に よ り 実行ユ ニ ッ ト に正 し いバ イ ト が送信 さ れ ます。 102 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス デー タ キ ャ ッ シ ュの読み出 し ミ ス 1. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を ス ト ール し ます。 2. 制御ビ ッ ト を Low (DCACHE_FSL_OUT_Control = 0) に設定 し て読み出 し ア ク セ ス を示 し 、 ワ ー ド に揃えた (1) ま たはキ ャ ッ シ ュ ラ イ ンで揃え た ミ ス ア ド レ ス を DCACHE_FSL_OUT _Data に書 き 込みます。 3. デー タ が存在す る こ と を示す DCACHE_FSL_IN_Exists が High にな る ま で待機 し ます。 メ モ : DCACHE_FSL_IN_Exists が High にな る 前に、少な く と も 1 ク ロ ッ ク サ イ ク ル間 wait 状態 であ る 必要があ り ます。 DXCL プ ロ ト コ ル ( ク リ テ ィ カル ワー ド フ ァ ース ト ) 4. DCACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。 5. ク リ テ ィ カル ワー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。 6. キ ャ ッ シ ュ ラ イ ンの残 り の 3 ワ ー ド ま たは 7 ワー ド に対 し 、 手順 4 ~ 5 を繰 り 返 し ます。 DXCL2 プ ロ ト コ ル ( リ ニ ア フ ェ ッ チ) 3. DCACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。 4. 要求 さ れた ワ ー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。 5. DCACHE_FSL_IN_Data か ら の残 り の ワー ド を キ ャ ッ シ ュ に保存 し ます。 デー タ キ ャ ッ シ ュ 書き込み C_DCACHE_INTERFACE が 1 に設定 さ れてい る 場合、 CacheLink はバース ト 書 き 込みま たはシ ン グル ワー ド 書 き 込みを実行す る こ と がで き ます。 C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る 場合、 キ ャ ッ シ ュ ラ イ ン全体が有効です。 C_DCACHE_USE_WRITEBACK が ク リ ア さ れて 0 にな る 場合、 デー タ キ ャ ッ シ ュへの書 き込み は常に ラ イ ト ス ルーなので、 キ ャ ッ シ ュ のデー タ 有無にかかわ ら ず、 CacheLink を介 し た書 き込み が行われます。 DXCL2 プ ロ ト コ ルが選択 さ れてい る場合、バース ト キ ャ ッ シ ュ ラ イ ン書 き 込みで、キ ャ ッ シ ュ コ ン ト ロ ー ラ は次のシーケ ン ス を実行 し ます。 1. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。 2. DCACHE_FSL_OUT_Data へのア ド レ ス にキ ャ ッ シ ュ を揃え た場合、 制御ビ ッ ト を High (DCACHE_FSL_OUT_Control = 1) に設定 し て書き 込みア ク セ ス を示 し ます。こ のア ド レ ス の 最下位の 2 ビ ッ ト (30:31) は、0b10=burst のバース ト ア ク セ ス を エン コ ー ド す る ために使用 さ れます。シ ン グル バ イ ト 書 き 込みか ら のバース ト ア ク セ ス を隔離す る には、ス テ ッ プ 4 の最初 のデー タ ワー ド の制御ビ ッ ト は、 バース ト ア ク セ ス に対 し 、 Low (DCACHE_FSL_OUT _Control = 0) にな り ます。 3. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。 4. 保存す る デー タ を DCACHE_FSL_OUT_Data に書 き込みます。 制御ビ ッ ト はバース ト ア ク セ ス に対 し 、 Low (DCACHE_FSL_OUT_Control = 0) です。 5. キ ャ ッ シ ュ ラ イ ンの後続ワ ー ド に対 し て手順 3 お よ び 4 を繰 り 返 し ます。 DXCL ま たは DXCL2 プ ロ ト コ ルでは、 シ ン グル ワ ー ド 書 き 込みで、 キ ャ ッ シ ュ コ ン ト ロ ー ラ は 次のシーケ ン ス を実行 し ます。 1. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 103 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 2. CACHE_FSL_OUT_Data に ミ ス し たア ド レ ス を書 き込み、 制御ビ ッ ト を High (DCACHE _FSL_OUT_Control = 1) に設定 し て書 き込みア ク セ ス を示 し ます。 0b00=byte0、 0b01=byte1、 halfword0、 0x10=byte2、 0x11=byte3、 halfword1 な ど のバ イ ト イ ネーブルお よ びハーフ ワ ー ド イ ネーブルのエン コー ド には、ア ド レ ス の最下位ビ ッ ト (30:31) の 2 ビ ッ ト が使用 さ れます。 手順 4 のデー タ の制御ビ ッ ト に よ っ てハーフ ワ ー ド ま たはバ イ ト ア ク セ ス のいずれかが選択 さ れます。 3. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。 4. 保存す る デー タ を DCACHE_FSL_OUT_Data に書 き 込みます。 バ イ ト お よ びハーフ ワー ド ア ク セ ス では、デー タ はバ イ ト レーンに書 き 込まれます。バ イ ト は 4 つのバ イ ト レーンすべてに、 ハーフ ワ ー ド は両方のハーフ ワ ー ド レーンに書き 込まれます。バース ト ア ク セ ス か ら 隔離す る には、 制御ビ ッ ト は、 ワ ー ド お よ びハーフ ワ ー ド ア ク セ ス では Low (DCACHE_FSL_OUT_Control = 0)、 バ イ ト ア ク セ ス では High であ る 必要があ り ます。 ワ ー ド ア ク セ ス と ハーフ ワー ド ア ク セ スは、 ア ド レ ス の最下位ビ ッ ト で区別で き ます。 0 の場合は ワ ー ド で、 1 の場合はハーフ ワ ー ド です。 デバ ッ グ イ ン タ ー フ ェ イ ス MicroBlaze のデバ ッ グ イ ン タ ーフ ェ イ ス は、 ザ イ リ ン ク ス のマ イ ク ロ プ ロ セ ッ サ デバ ッ グ モ ジ ュ ール (MDM) IP コ ア と 共に機能す る よ う に設計 さ れています。 MDM は、FPGA の JTAG ポー ト を介 し て Xilinx Microprocessor Debugger (XMD) に よ り 制御 し ます。 MDM では、同時に複数の MicroBlaze プ ロ セ ッ サを制御で き ます。 MicroBlaze のデバ ッ グ信号は、 DEBUG バ ス にグループ 化 さ れてい ます。 こ の信号を表 2-9 に示 し ます。 表 2-9 : 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 入力 std_logic 入力 std_logic 入力 std_logic 入力 std_logic 入力 イ ネーブル Dbg_Shift1 MDM か ら の JTAG BSCAN シ フ ト 信号 Dbg_Capture MDM か ら の JTAG BSCAN キ ャ プチ ャ 信号 Dbg_Update MDM か ら の JTAG BSCAN ア ッ プデー ト 信号 Debug_Rst1 MDM から のリ セッ ト 信号 (ア ク テ ィ ブ High)。 1 Clk ク ロ ッ ク サイ ク ル以上保持する 必要 あり 。 1. MicroBlaze v7.00 では Dbg_Shift が追加 さ れ、 Debug_Rst は DEBUG バ ス に含 まれ る よ う にア ッ プデー ト さ れてい ま す。 104 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ト レース イ ン タ ー フ ェ イ ス ト レース イ ン タ ー フ ェ イ ス MicroBlaze コ アは、 ト レース の目的で多数の内部信号を送信 し ます。 こ の信号の イ ン タ ーフ ェ イ ス は標準化 さ れてお ら ず、 プ ロ セ ッ サの新 し い リ ビ ジ ョ ンでは、 同 じ 信号の選択ま たは機能がサポー ト さ れない可能性があ り ます。 こ れ ら の信号にはカ ス タ ム ロ ジ ッ ク を設計する のではな く 、 ザ イ リ ン ク ス の解析用 IP を使用す る こ と をお勧め し ます。 ト レース信号は、 TRACE バ ス にグループ化 さ れてい ます。 MicroBlaze v7.00 向けに更新 さ れてい る ト レース信号を表 2-10 に、ト レース の例外の タ イ プを表 2-11 に示 し ます。 未使用の例外はすべて予約済みです。 表 2-10 : MicroBlaze ト レース信号 信号名 説明 VHDL の型 方向 Trace_Valid_Instr プ ロ セ ッ サ実行段の有効な命令 std_logic 出力 Trace_Instruction1 命令 コー ド std_logic_vector 出力 (0 ~ 31) Trace_PC1 プログラ ム カウン タ std_logic_vector 出力 (0 ~ 31) Trace_Reg_Write1 レ ジ ス タ フ ァ イ ルに書 き込む命令 std_logic 出力 Trace_Reg_Addr1 デス ティ ネーショ ン レ ジス タ アド レ ス std_logic_vector (0 ~ 4) 出力 Trace_MSR_Reg1 マシ ン ス テー タ ス レ ジ ス タ (MSR) std_logic_vector (0 ~ 14)2 出力 Trace_PID_Reg1,2 プ ロ セ ス識別レ ジ ス タ std_logic_vector (0 ~ 7) 出力 Trace_New_Reg_Value1 デス テ ィ ネーシ ョ ン レ ジ ス タ のア ッ プ デー ト 値 std_logic_vector (0 ~ 31) 出力 Trace_Exception_Taken1 例外の命令結果 std_logic 出力 Trace_Exception_Kind1,3 例外の タ イ プ。 次の表を参照。 std_logic_vector (0 ~ 4)2 出力 Trace_Jump_Taken1 真であ る と 評価 さ れた分岐命令 std_logic 出力 Trace_Delay_Slot1 分岐の遅延ス ロ ッ ト に含まれ る命令 std_logic 出力 Trace_Data_Access1 有効なデー タ 側ア ク セ ス std_logic 出力 Trace_Data_Address1 デー タ 側 メ モ リ ア ク セ ス のア ド レ ス std_logic_vector (0 ~ 31) 出力 Trace_Data_Write_Value1 有効なデー タ 側 メ モ リ 書 き 込みア ク セス std_logic_vector (0 ~ 31) 出力 Trace_Data_Byte_Enable1 有効なデー タ 側 メ モ リ ア ク セ ス のバ イ ト イ ネーブル std_logic_vector (0 ~ 3) 出力 Trace_Data_Read1 デー タ 側 メ モ リ ア ク セ スは読み出 し std_logic 出力 Trace_Data_Write1 デー タ 側 メ モ リ ア ク セ スは書 き 込み std_logic 出力 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 105 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-10 : MicroBlaze ト レース信号 (続き ) 信号名 説明 VHDL の型 方向 Trace_DCache_Req デー タ メ モ リ ア ド レ ス はデー タ キ ャ ッ シ ュ範囲内 std_logic 出力 Trace_DCache_Hit デー タ メ モ リ ア ド レ ス はデー タ キ ャ ッ シ ュ に存在 std_logic 出力 Trace_ICache_Req 命令 メ モ リ ア ド レ スは命令キ ャ ッ シ ュ 範囲内 std_logic 出力 Trace_ICache_Hit 命令 メ モ リ ア ド レ スは メ モ リ キ ャ ッ シ ュ に存在 std_logic 出力 Trace_OF_PipeRun デ コ ー ド 段のパ イ プ ラ イ ン予約 std_logic 出力 Trace_EX_PipeRun4 実行段のパ イ プ ラ イ ン予約 std_logic 出力 Trace_MEM_PipeRun4 メ モ リ 段のパ イ プ ラ イ ン予約 std_logic 出力 Trace_MB_Halted2 パ イ プ ラ イ ンのデバ ッ グに よ る 停止 std_logic 出力 1. Trace_Valid_Instr = 1 の と き のみ有効 2. MicroBlaze v7.00 での変更 : Trace_MSR_Reg に 4 ビ ッ ト 追加、 Trace_PID_Reg の追加、 Trace_MB_Halted の追加、 Trace_Exception Kind に 1 ビ ッ ト 追加 3. Trace_Exception_Taken = 1 の と き のみ有効 4. エ リ ア最適化 と の同時使用不可 表 2-11 : ト レースの例外の タ イ プ Trace_Exception_Kind [0:4] 説明 00000 高速シ ンプ レ ッ ク ス リ ン ク に よ る 例外1 00001 不整列デー タ ア ク セ ス に よ る 例外 00010 不正な op コ ー ド に よ る 例外 00011 命令バ ス に よ る 例外 00100 デー タ バ ス に よ る 例外 00101 0 での除算に よ る 例外 00110 FPU での例外 00111 特権命令に よ る 例外1 01010 割 り 込み 01011 マ ス ク 不可の外部ブ レー ク 01100 マ ス ク 可の外部ブ レー ク 10000 デー タ 格納に よ る 例外1 10001 命令格納に よ る 例外1 10010 デー タ TLB ミ ス に よ る例外1 10011 命令 TLB ミ ス に よ る例外1 1. MicroBlaze v7.00 で追加 106 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン MicroBlaze コ アのコ ン フ ィ ギ ュ レーシ ョ ン MicroBlaze コ アは、 ユーザーが柔軟に コ ン フ ィ ギ ュ レーシ ョ ンで き る よ う 開発 さ れてい る ため、 コ ス ト お よ びパフ ォーマン ス の要件を満たす よ う 設定で き ます。 コ ン フ ィ ギ ュ レーシ ョ ンには、 通常プ ロ セ ッ サの特定の機能を イ ネーブルに し 、 サ イ ズ を設定す る パ ラ メ ー タ を使用 し ます。 た と えば、命令キ ャ ッ シ ュ は C_USE_ICACHE パ ラ メ ー タ を設定す る こ と に よ り イ ネーブルに し 、 命令キ ャ ッ シ ュ のサ イ ズは C_DCACHE_BYTE_SIZE、 キ ャ ッ シ ュ可能 な メ モ リ 範囲は C_ICACHE_BASEADDR お よ び C_ICACHE_HIGHADDR で指定 し ます。 MicroBlaze v7.00 で使用可能なパ ラ メ ー タ を表 2-12 に示 し ます。 こ れ ら のパ ラ メ ー タ には以前の バージ ョ ンの MicroBlaze では認識 さ れない も の も あ り ますが、 コ ン フ ィ ギ ュ レーシ ョ ンには後方 互換性があ り ます。 メ モ : 影付き の行は、 パ ラ メ ー タ が固定で変更で き ない こ と を示 し ます。 表 2-12 : MPD パラ メ ー タ パラ メ ー タ 名 機能/説明 許容値 ツールに デ フ ォル ト 値 よ る自動 VHDL の型 割 り 当て C_FAMILY ターゲ ッ ト フ ァ ミ リ aspartan3 aspartan3a aspartan3adsp aspartan3e spartan3 spartan3a spartan3adsp spartan3an spartan3e spartan6 qrvirtex4 qvirtex4 virtex4 virtex5 virtex6 virtex5 あり 文字列 C_DATA_SIZE デー タ サ イ ズ 32 32 なし 整数 1 1 なし 整数 なし 整数 C_DINAMIC_BUS_SIZING C_SCO ザ イ リ ン ク ス内部 0 0 C_AREA_OPTIMIZED 低い命令 ス ループ ッ ト でエ リ ア を 最 適化す る た め の イ ン プ リ メ ン テーシ ョ ンの選択 0、 1 0 整数 C_INTERCONNECT PLB イ ン タ ー コ ネ ク ト の選択 0、 1 1 整数 C_PVR プ ロ セ ッ サ バージ ョ ン レ ジ ス タ のモー ド 選択 0、 1、 2 0 整数 C_PVR_USER1 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ USER1 の定数 0x00 ~ 0xff 0x00 std_logic_ vector (0 ~ 7) MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 107 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-12 : MPD パラ メ ー タ (続き ) パラ メ ー タ 名 ツールに デ フ ォル ト 値 よ る自動 VHDL の型 割 り 当て 機能/説明 許容値 C_PVR_USER2 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ USER2 の定数 0x00000000 ~ 0xffffffff C_RESET_MSR MSR の リ セ ッ ト 値 0x00 、 0x20 、 0x00 0x80、 0xa0 C_INSTANCE イ ン ス タ ン ス名 任意 の イ ン ス タ ン ス名 microblaze あり 文字列 C_D_PLB デー タ側 PLB イ ン タ ーフ ェ イ ス 0、 1 0 あり 整数 C_D_OPB デー タ側 OPB イ ン タ ーフ ェ イ ス 0、 1 1 あり 整数 C_D_LMB デー タ側 LMB イ ン タ ーフ ェ イ ス 0、 1 1 あり 整数 C_I_PLB 命令側 PLB イ ン タ ーフ ェ イ ス 0、 1 0 あり 整数 C_I_OPB 命令側 OPB イ ン タ ーフ ェ イ ス 0、 1 1 あり 整数 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、 2 1 整数 C_USE_FPU ハー ド ウ ェ ア浮動小数点ユニ ッ ト を使用 0、 1、 2 0 整数 C_USE_MSR_INSTR MSRSET お よ び MSRCLR 命令 0、 1 1 整数 0、 1 1 整数 0x00000000 std_logic_ vector (0 ~ 31) std_logic_ vector を イ ネーブルにする C_USE_PCMP_INSTR PCMPBF、 PCMPEQ、 PCMPNE 命令を イ ネーブルにする C_UNALIGNED_ EXCEPTIONS 不整列デー タ ア ク セ ス に対す る 例 外処理を イ ネーブルにする 0、 1 0 整数 C_ILL_OPCODE_ EXCEPTION 不正な op コ ー ド に対す る例外処 理を イ ネーブルにする 0、 1 0 整数 C_IPLB_BUS_EXCEPTION IPLB バ ス エ ラ ーに対す る例外処 0、 1 0 整数 0、 1 0 整数 0、 1 0 整数 0、 1 0 整数 理を イ ネーブルにする C_DPLB_BUS_EXCEPTION DPLB バ ス エ ラ ーに対す る例外処 理を イ ネーブルにする C_IOPB_BUS_EXCEPTION IOPB バ ス エ ラ ーに対す る例外処 理を イ ネーブルにする C_DOPB_BUS_EXCEPTION DOPB バス エ ラ ーに対す る例外 処理を イ ネーブルにする 108 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン 表 2-12 : MPD パラ メ ー タ (続き ) パラ メ ー タ 名 C_DIV_ZERO_EXCEPTION 機能/説明 0 での除算お よ び除算オーバーフ 許容値 ツールに デ フ ォル ト 値 よ る自動 VHDL の型 割 り 当て 0、 1 0 整数 ロ ーに対す る 例外処理を イ ネーブ ルにす る C_FPU_EXCEPTION ハー ド ウ ェ ア浮動小数点ユニ ッ ト に関す る 例外処理を イ ネーブルに する 0、 1 0 整数 C_OPCODE_0x0_ILLEGAL op コ ー ド 0x0 を不正な命令 と し 0、 1 0 整数 て検出 C_FSL_EXCEPTION 高速シ ンプ レ ッ ク ス リ ン ク に対す る 例外処理を イ ネーブルにする 0、 1 0 整数 C_DEBUG_ENABLED MDM デバ ッ グ イ ン タ ーフ ェ イ ス 0、 1 0 整数 C_NUMBER_OF_PC_BRK ハー ド ウ ェ ア ブ レー ク ポ イ ン ト 数 0~8 1 整数 C_NUMBER_OF_RD_ADDR _BRK 読み出 し ア ド レ ス ウ ォ ッ チポ イ ン ト数 0~4 0 整数 C_NUMBER_OF_WR_ ADDR_BRK 書 き 込みア ド レ ス ウ ォ ッ チポ イ ン ト数 0~4 0 整数 C_INTERRUPT_IS_EDGE レベル/エ ッ ジ割 り 込み 0、 1 0 あり 整数 C_EDGE_IS_POSITIVE 立ち上が り / 立ち下が り エ ッ ジ割 り 込み 0、 1 1 あり 整数 C_FSL_LINKS1 FSL イ ン タ ーフ ェ イ ス の数 0 ~ 16 0 あり 整数 C_FSL_DATA_SIZE FSL のデー タ バス サ イ ズ 32 32 なし 整数 C_USE_EXTENDED_FSL_ INSTR 拡張 FSL 命令の使用を イ ネーブル にする 0、 1 0 整数 C_ICACHE_BASEADDR 命令キ ャ ッ シ ュ のベース ア ド レ ス 0x00000000 ~ 0xFFFFFFFF 0x00000000 std_logic_ vector C_ICACHE_HIGHADDR 命令キ ャ ッ シ ュ のハ イ ア ド レ ス 0x00000000 ~ 0xFFFFFFFF 0x3FFFFFFF std_logic_ vector C_USE_ICACHE 命令キ ャ ッ シ ュ 0、 1 0 整数 C_ALLOW_ICACHE_WR 命令キ ャ ッ シュ ラ イ ト イ ネーブル 0、 1 1 整数 C_ICACHE_LEN 命令キ ャ ッ シ ュ ラ イ ンの長 さ 4、 8 4 整数 C_ICACHE_ALWAYS_USED 命令キ ャ ッ シ ュ の CacheLink をす べての メ モ リ ア ク セ ス に使用 0、 1 1 整数 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 109 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 表 2-12 : MPD パラ メ ー タ (続き ) パラ メ ー タ 名 C_ICACHE_INTERFACE 機能/説明 命令キ ャ ッ シ ュ CacheLink イ ン ターフ ェ イ ス プ ロ ト コ ル ツールに デ フ ォル ト 値 よ る自動 VHDL の型 割 り 当て 許容値 0、 1 0 あ り2 整数 あり 整数 0 = IXCL 1 = IXCL2 C_ADDR_TAG_BITS 命令キ ャ ッ シ ュ のア ド レ ス タ グ 0 ~ 25 17 C_CACHE_BYTE_SIZE 命令キ ャ ッ シ ュ サ イ ズ 64、 128、 256、 512、 1024、 2048、 4096、 8192、 16384、 32768、 655363 8192 整数 C_ICACHE_USE_FSL OPB の代わ り に CacheLink を命 1 1 整数 令キ ャ ッ シ ュ に使用 C_DCACHE_BASEADDR デー タ キ ャ ッ シ ュ のベース ア ド レス 0x00000000 ~ 0xFFFFFFFF 0x00000000 std_logic_ vector C_DCACHE_HIGHADDR データ キャ ッ シュ のハイ アド レ ス 0x00000000 ~ 0xFFFFFFFF 0x3FFFFFFF std_logic_ vector C_USE_DCACHE デー タ キ ャ ッ シ ュ 0、 1 0 整数 C_ALLOW_DCACHE_WR デー タ キ ャ ッ シ ュ ラ イ ト イ ネー ブル 0、 1 1 整数 C_DCACHE_LEN デー タ キ ャ ッ シ ュ ラ イ ンの長 さ 4、 8 4 整数 C_DCACHE_ALWAYS _USED デー タ キ ャ ッ シ ュ の CacheLink をすべてのア ク セ ス に使用 0、 1 1 整数 C_DCACHE_INTERFACE デー タ キ ャ ッ シ ュ CacheLink イ ン ターフ ェ イ ス プ ロ ト コ ル 0、 1 0 あ り2 整数 0 = DXCL 1 = DXCL2 C_DCACHE_USE_WRITEB ACK デー タ キ ャ ッ シ ュ ラ イ ト バ ッ ク 格納ポ リ シーを使用 0、 1 0 C_DCACHE_ADDR_TAG データ キャ ッ シュ のアド レ ス タ グ 0 ~ 25 17 110 japan.xilinx.com 整数 あり 整数 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン 表 2-12 : MPD パラ メ ー タ (続き ) パラ メ ー タ 名 機能/説明 許容値 ツールに デ フ ォル ト 値 よ る自動 VHDL の型 割 り 当て C_DCACHE_BYTE_SIZE デー タ キ ャ ッ シ ュ サ イ ズ 64、 128、 256、 512、 1024、 2048、 4096、 8192、 16384、 32768、 655363 8192 整数 C_DCACHE_USE_FSL OPB の代わ り に CacheLink を デー タ キ ャ ッ シ ュ に使用 1 1 整数 C_DPLB_DWIDTH デー タ側 PLB のデー タ 幅 32 32 整数 C_DPLB_NATIVE_DWIDTH デー タ側 PLB 固有のデー タ 幅 32 32 整数 C_DPLB_BURST_EN データ 側 PLB バース ト イ ネーブル 0 0 整数 C_DPLB_P2P デー タ側 PLB Point-to-point 0、 1 0 整数 C_IPLB_DWIDTH 命令側 PLB のデー タ 幅 32 32 整数 C_IPLB_NATIVE_DWIDTH 命令側 PLB 固有のデー タ 幅 32 32 整数 C_IPLB_BURST_EN 命令側 PLB バース ト イ ネーブル 0 0 整数 C_IPLB_P2P 命令側 PLB Point-to-point 0、 1 0 整数 C_USE_MMU4 メ モ リ 管理 0、 1、 2、 3 0 整数 4 整数 0 : なし 1 : ユーザー モー ド 2 : 保護 3 : 仮想 C_MMU_DTLB_SIZE4 デー タ シ ャ ド ウ TLB のサ イ ズ 1、 2、 4、 8 C_MMU_ITLB_SIZE4 命令シ ャ ド ウ TLB のサ イ ズ 1、 2、 4、 8 C_MMU_TLB_ACCESS4 メ モ リ 管理用の特殊 レ ジ ス タ への ア クセス 0、 1、 2、 3 3 整数 整数 整数 0 : 最小 1 : 読み出 し 2 : 書 き 込み 3 : フル ア ク セ ス C_MMU_ZONES4 メ モ リ 保護ゾーンの数 0 ~ 16 16 C_USE_INTERRUPT 割 り 込み処理を有効 0、 1 0 あり 整数 C_USE_EXT_BRK 外部ブ レー ク 処理を有効 0、 1 0 あり 整数 C_USE_EXT_NM_BRK 外部マ ス ク 不可のブ レー ク を有効 0、 1 0 あり 整数 1. コ プ ロ セ ッ サ ウ ィ ザー ド を使用 し てい る 場合は、 FSL リ ン ク の数はツールに よ り 割 り 当て ら れ ます。 手動で IP を追加す る 場合は、 パ ラ メ ー タ も 手動でア ッ プデー ト し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 111 第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス 2. EDK ツールで割 り 当て ら れた値は手動で割 り 当て ら れた値に上書 き さ れ ます。 3. すべてのアーキ テ ク チ ャ ですべてのサ イ ズが設定で き る わけではあ り ません。 キ ャ ッ シ ュ では、 0 ~ 32 個の RAMB プ リ ミ テ ィ ブが使用 さ れ ます。 キ ャ ッ シ ュ サ イ ズが 2048 未満の場合は 0 です。 4. C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合は使用で き ま せん。 112 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 第3章 MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI) こ の章では、 ソ フ ト プ ロ セ ッ サに対 し てアセンブ リ 言語で ソ フ ト ウ ェ ア を開発す る上で重要な MicroBlaze™ のアプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI) について説明 し ます。 MicroBlaze の GNU コ ンパ イ ラ は こ の章に記述 さ れてい る 規則に従 う ので、アセ ンブ リ プ ロ グ ラ マ で記述 さ れ る コ ー ド も 、 コ ンパ イ ラ で生成 さ れ る コー ド と 互換性を持たせ る ため、 同 じ 規則に従 う 必要があ り ます。 割 り 込みお よ び例外処理について も 簡単に説明 し ます。 こ の章は次のセ ク シ ョ ン よ り 構成 さ れてい ます。 • デー タ 型 • レ ジ ス タ の使用規則 • ス タ ッ ク の規則 • メ モ リ モデル • 割 り 込みお よ び例外処理 デー タ 型 MicroBlaze アセ ンブ リ プ ロ グ ラ ムで使用 さ れ るデー タ 型を、表 3-1 に示 し ます。 data8、 data16、お よ び data32 の よ う なデー タ 型は、 通常のバ イ ト 、 ハーフバ イ ト 、 お よ びワ ー ド で使用 さ れます。 表 3-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 pointera 2/4 a. グ ロ ーバル ポ イ ン タ でア ク セ ス可能な ス モール デー タ 領域へのポ イ ン タ は、 deta16 です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 113 第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI) レ ジ ス タ の使用規則 MicroBlaze に対す る レ ジ ス タ の使用規則を表 3-2 に示 し ます。 表 3-2 : レ ジ ス タ の使用規則 レジス タ タ イプ 対象 用途 R0 専用 ハー ド ウ ェ ア 値0 R1 専用 ソ フ ト ウェア ス タ ッ ク ポインタ R2 専用 ソ フ ト ウェア 読み出 し 専用の ス モール デー タ 領域ア ン カー R3 ~ R4 揮発性 ソ フ ト ウェア 戻 り 値/一時保存 R5 ~ R10 揮発性 ソ フ ト ウェア パ ラ メ ー タ の引渡 し /一時保存 R11 ~ R12 揮発性 ソ フ ト ウェア 一時保存 R13 専用 ソ フ ト ウェア 読み出 し /書 き込みの ス モール デー タ 領域ア ン カー R14 専用 ハー ド ウ ェ ア 割 り 込みの戻 り ア ド レ ス R15 専用 ソ フ ト ウェア サブルーチンの戻 り ア ド レ ス R16 専用 ハー ド ウ ェ ア ト ラ ッ プ用の戻 り ア ド レ ス (デバ ッ ガ ) R17 専用 ハー ド ウ ェ ア ( サポー ト し てい る 場合)、 それ 以外の場合は ソ フ ト ウェア 例外用の戻 り ア ド レ ス R18 専用 ソ フ ト ウェア アセンブ ラ 用に予約済み/ コ ンパ イ ラ 一時保存 R19 不揮発性 ソ フ ト ウェア 関数呼び出 し を越え て保存す る必要あ り 、 callee-save R20 専用 ま たは 不揮発性 ソ フ ト ウェア R21 ~ R31 不揮発性 ソ フ ト ウェア PIC (Position Independent Code) では GOT (Global Offset Table) へのポ イ ン タ の格納用に予 約済み。非 PIC コー ド では不揮発性。 関数呼び出 し を越え て保存す る必要あ り 、 callee-save 関数呼び出 し を越え て保存す る必要あ り 、 callee-save 114 RPC 特殊 ハー ド ウ ェ ア プログラ ム カウン タ RMSR 特殊 ハー ド ウ ェ ア マシ ン ス テー タ ス レ ジ ス タ REAR 特殊 ハー ド ウ ェ ア 例外ア ド レ ス レ ジ ス タ RESR 特殊 ハー ド ウ ェ ア 例外ス テー タ ス レ ジ ス タ RFSR 特殊 ハー ド ウ ェ ア 浮動小数点ス テー タ ス レ ジ ス タ RBTR 特殊 ハー ド ウ ェ ア 分岐 タ ーゲ ッ ト レ ジ ス タ REDR 特殊 ハー ド ウ ェ ア 例外デー タ レ ジ ス タ RPID 特殊 ハー ド ウ ェ ア プ ロ セ ス識別レ ジ ス タ RZPR 特殊 ハー ド ウ ェ ア ゾーン保護レ ジ ス タ RTLBLO 特殊 ハー ド ウ ェ ア 変換ル ッ ク アサ イ ド バ ッ フ ァ Low レ ジ ス タ RTLBHI 特殊 ハー ド ウ ェ ア 変換ル ッ ク アサ イ ド バ ッ フ ァ High レ ジ ス タ japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) ス タ ッ ク の規則 表 3-2 : レ ジ ス タ の使用規則 レジス タ タ イプ 対象 用途 RTLBX 特殊 ハー ド ウ ェ ア 変換ル ッ ク アサ イ ド バ ッ フ ァ イ ンデ ッ ク ス レ ジ スタ RTLBSX 特殊 ハー ド ウ ェ ア 変換ル ッ ク アサ イ ド バ ッ フ ァ 検索 イ ンデ ッ ク ス RPVR0 ~ RPVR11 特殊 ハー ド ウ ェ ア プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 ~11 MicroBlaze アーキテ ク チ ャ では、 32 個の汎用レ ジ ス タ (GPR) が定義 さ れます。 こ れ ら の レ ジ ス タ は、 揮発性、 不揮発性、 お よ び専用に分類 さ れます。 • 揮発性レ ジ ス タ (caller-save) は、 一時保存 と し て使用 さ れ、 関数呼び出 し を越え て値を保持す る こ と はあ り ません。 R3 ~ R12 の レ ジ ス タ は揮発性で、 R3 お よ び R4 は呼び出 し 関数の戻 り 値に使用 さ れます。 R5 ~ R10 の レ ジ ス タ は、 サブルーチン間のパ ラ メ ー タ の引 き渡 し に使用 さ れます。 • R19 ~ R31 の レ ジ ス タ では、関数呼び出 し を越え て値が保持 さ れ る ので、不揮発性の レ ジ ス タ (callee-save) と 定義 さ れてい ます。 呼び出 さ れ る側の関数で、 こ れ ら の不揮発性の レ ジ ス タ が 保存 さ れ、使用 さ れます。 こ れ ら は、通常プ ロ ロ ーグ中に ス タ ッ ク に保存 さ れ、 エ ピ ロ ーグ中に 再び読み込まれます。 • レ ジ ス タ には、 専用レ ジ ス タ と し て使用 さ れ る も の も あ り 、 プ ロ グ ラ マでは こ れ ら の レ ジ ス タ がほかの用途に使用 さ れ る こ と はあ り ません。 ♦ R14 ~ R17 の レ ジ ス タ は、 割 り 込み、 サブルーチン、 ト ラ ッ プ、 例外 と い う 順序で戻 り ア ド レ ス を格納す る のに使用 さ れます。 サブルーチンは、 分岐お よ び リ ン ク 命令を使用 し て 呼び出 さ れ、 こ れ ら の命令では、 現在のプ ロ グ ラ ム カ ウ ン タ (PC) が レ ジ ス タ R15 に保存 さ れます。 ♦ ス モール デー タ 領域ポ イ ン タ は、 16 ビ ッ ト の即値があ る メ モ リ ロ ケーシ ョ ンにア ク セ ス す る のに使用 さ れます。 こ れ ら の領域については、 「 メ モ リ モデル」 で説明 し ます。 読み出 し 専用の ス モール デー タ 領域 (SDA) ア ン カー R2 (読み出 し 専用) は、リ テ ラ ルの よ う な定 数にア ク セ スす る のに使用 さ れます。 ま た SDA ア ン カー R13 (読み出 し /書 き 込み) は、 ス モール デー タ読み出 し /書 き込みセ ク シ ョ ンの値にア ク セ スす る のに使用 さ れます。 ♦ レ ジ ス タ R1 には、 ス タ ッ ク ポ イ ン タ の値が格納 さ れ、関数の入力 と 終了で更新 さ れます。 ♦ レ ジ ス タ R18 は、 アセ ンブ ラ 操作の一時レ ジ ス タ と し て使用 さ れます。 • MicroBlaze には、 プ ロ グ ラ ム カ ウ ン タ (rpc)、 マシ ン ス テー タ ス レ ジ ス タ (rmsr)、例外ス テー タ ス レ ジ ス タ (resr)、 例外ア ド レ ス レ ジ ス タ (rear)、 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (rfsr)、分岐 タ ーゲ ッ ト レ ジ ス タ (rbtr)、例外デー タ レ ジ ス タ (redr)、 メ モ リ 管理レ ジ ス タ (rpid、 rzpr、 rtlblo、 rtlbhi、 rtlbx、 rtlbsx)、 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (rpvr0 ~ rpvr11) な ど の 特殊用途レ ジ ス タ があ り ます。 こ れ ら の レ ジ ス タ は直接レ ジ ス タ フ ァ イ ルにマ ッ プ さ れていな いため、使用法は汎用レ ジ ス タ と は異な り ます。特殊用途レ ジ ス タ の値は、 mts 命令を使用 し て 汎用レ ジ ス タ に、 mfs 命令を使用 し て汎用レ ジ ス タ か ら 転送で き ます。 ス タ ッ クの規則 MicroBlaze で使用す る ス タ ッ ク の規則を表 3-3 に示 し ます。 表 3-3 の影付 き の部分は、呼び出 し 側の関数の ス タ ッ ク フ レームの部分を示 し 、影な し の部分は、呼 び出 さ れ る 側の フ レーム関数を示 し ます。 ス タ ッ ク フ レームの ABI 規則では、 パ ラ メ ー タ の引渡 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 115 第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI) し 、 不揮発性レ ジ ス タ の値の保持、 お よ び関数内の ロ ーカル変数に対す る スペース の割 り 当てに関 す る プ ロ ト コ ルが定義 さ れています。 ほかのサブルーチンの呼び出 し を含む関数は非 リ ーフ関数 と 呼ばれます。 こ れ ら の非 リ ーフ関数で は、使用する ス タ ッ ク フ レーム領域を新規に作成す る必要があ り ます。 ス タ ッ ク ポ イ ン タ の値はプ ロ グ ラ ムの開始時に最大で、 関数が呼び出 さ れ る たびに、 各関数の ス タ ッ ク フ レームで必要 と な る ワ ー ド 数分だけ減少 し ます。 呼び出 し 側の関数の ス タ ッ ク ポ イ ン タ の値は、 呼び出 さ れ る側の関数 の ス タ ッ ク ポ イ ン タ の値に比べて大 き いのが通常です。 表 3-3 : ス タ ッ ク の規則 ハイ ア ド レ ス 呼び出 さ れたサブルーチンに対す る関数パ ラ メ ー タ (Arg n ..Arg1) ( オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ で必要 と な る引数の最大数) 古い ス タ ッ ク ポ イ ン タ リ ン ク レ ジ ス タ (R15) 呼び出 さ れ る側で保存 さ れた レ ジ ス タ (R31.....R19) ( オプシ ョ ン : 現在のプ ロ シージ ャ で使用 さ れ る レ ジ ス タ のみが保 存さ れる) 現在のプ ロ シージ ャ に対す る ロ ーカル変数 ( オプシ ョ ン : プ ロ シージ ャ で ロ ーカルが定義 さ れてい る と き のみ 表示) フ ァ ン ク シ ョ ン パ ラ メ ー タ (Arg n .. Arg 1) ( オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ で必要 と な る引数の最大数) 新し いス タ ッ ク ポ イ ン タ リ ン ク レジス タ 下位ア ド レ ス た と えば、 Func1 が Func2 を呼び出 し 、 Func2 が Func3 を呼び出す と し ます。 それぞれの イ ン ス タ ン ス での ス タ ッ ク 表現を図 3-1 に示 し ます。 Func1 か ら の Func2 の呼び出 し 後に、ス タ ッ ク ポ イ ン タ (SP) の値は減少 し ます。 こ の SP 値は、Func3 の ス タ ッ ク フ レームに対応 し て さ ら に減少 し ます。 Func3 か ら 戻 る と 、 SP 値は Func 2 の元の値ま で増加 し ます。 図 3-1 を見 る と 、 ど の よ う に ス タ ッ ク が保持 さ れ る かがわか り ます。 116 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) メ モ リ モデル High Memory Func 1 Func 1 Func 1 Func 1 Func 2 Func 2 Func 2 SP SP SP Func 3 Low Memory SP X9584 図 3-1 : ス タ ッ ク フ レーム 呼び出 し 規則 呼び出 し 側の関数は、 レ ジ ス タ (R5 ~ R10) ま たは固有の ス タ ッ ク フ レーム を使用 し てパ ラ メ ー タ を呼び出 さ れ る 側の関数に渡 し ます。 読み出 さ れ る側では、 呼び出 し 側の ス タ ッ ク 領域を使用 し て 渡 さ れたパ ラ メ ー タ を格納 し ます。 図 3-1 を参照 し て く だ さ い。 Func2 のパ ラ メ ー タ は、レ ジ ス タ R5 ~ R10 ま たは Func1 に割 り 当て ら れた ス タ ッ ク フ レームに格納 さ れます。 メ モ リ モデル MicroBlaze の メ モ リ モデルは、 デー タ を、 ス モール デー タ 領域、 デー タ 領域、 共有の未初期化領 域、 リ テ ラ ルま たは定数の 4 つの領域に分類 し ます。 ス モール デー タ 領域 サ イ ズが小 さ く 、 グ ロ ーバルに初期化 さ れた変数が こ の領域に格納 さ れます。 こ の ス モール デー タ 領域に格納 さ れ る変数のサ イ ズ を決定す る し き い値は、 MicroBlaze の C コ ンパ イ ラ (mb-gcc) で 8 バ イ ト に設定 さ れてい ますが、コ ンパ イ ラ で コ マ ン ド ラ イ ンのオプシ ョ ン を使用 し て変更可能です。 こ のオプシ ョ ンの詳細は、『エンべデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マ ニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 ス モール デー タ領域には、 64KB の メ モ リ が割 り 当て ら れます。 こ の ス モール デー タ 領域には、読み出 し /書 き込み可能な ス モール デー タ 領域ア ン カー (R13) お よ び 16 ビ ッ ト のオ フ セ ッ ト を使用 し てア ク セ ス し ま す。 こ の領域にサ イ ズの小 さ い変数を割 り 当て る と 、 グ ロ ーバル変数にア ク セ スす る コー ド に IMM 命令を追加す る必要がな く な り ます。 こ のエ リ アに含まれ る 変数は、絶対ア ド レ ス を使用 し て も ア ク セ ス で き ます。 デー タ 領域 値が比較的大 き く 初期化 さ れた変数は、 デー タ 領域に割 り 当て ら れます。 こ の領域には、 コ ン パ イ ラ の コ マン ド ラ イ ン オプシ ョ ンに よ っ て、読み出 し /書 き込み可能な SDA ア ン カー (R13) ま たは絶対ア ド レ ス を使用 し てア ク セ ス で き ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 117 第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI) 共有の未初期化領域 初期化 さ れていないグ ロ ーバル変数は、 共有の領域に割 り 当て ら れます。 こ の領域には、 絶対ア ド レ ス ま たは読み出 し /書 き込み可能な ス モール デー タ 領域ア ン カー (R13) を使用 し てア ク セ ス で き ます。 リ テ ラルまたは定数 定数は、読み出 し 専用の ス モール デー タ 領域に配置 さ れ、読み出 し 専用の ス モール デー タ 領域ア ン カー (R2) を使用 し てア ク セ ス さ れます。 コ ンパ イ ラ で、 ベース ポ イ ン タ と し て動作す る グ ロ ーバル ポ イ ン タ が生成 さ れます。 SDA ア ン カーの値は、 最終の リ ン ク 段階で リ ン カに よ り 決定 さ れます。 メ モ リ の さ ま ざ ま なセ ク シ ョ ンの詳 細は、 『エンべデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「MicroBlaze リ ン カ ス ク リ プ ト で割 り 当て ら れ る セ ク シ ョ ン」 を参照 し て く だ さ い。 コ ンパ イ ラ では、 使用 さ れ る コ マ ン ド ラ イ ン オプシ ョ ンに応 じ て適切なセ ク シ ョ ンが生成 さ れます。 こ れ ら のオプシ ョ ンについては、『エンべ デ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 118 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 割 り 込みおよび例外処理 割 り 込みおよび例外処理 MicroBlaze では、表 3-4 に示す よ う に、割 り 込みお よ び例外処理に対 し て、特定のア ド レ ス ロ ケー シ ョ ンが使用 さ れます。 こ れ ら の ロ ケーシ ョ ンの コー ド は、 適切なハン ド ラ にジ ャ ンプす る よ う 記 述 さ れてい ます。 表 3-4 : 割 り 込みおよび例外処理 イベン ト ソ フ ト ウ ェ ア ラ ベル ハー ド ウ ェ アのジ ャ ン プ先 開始/ リ セ ッ ト 0x0 _start ユーザー例外 0x8 _exception_handler 割 り 込み 0x10 _interrupt_handler ブ レー ク (ハー ド ウ ェ ア / ソ フ ト ウ ェ ア) 0x18 - ハー ド ウ ェ ア例外 0x20 _hw_exception_handler 将来の使用に予約 0x28 ~ 0x4F - こ れ ら の ロ ケーシ ョ ンに記述 さ れてい る コ ー ド を次に示 し ます。 -xl-mode-xmdstub コ ンパ イ ラ オ プシ ョ ン を使用せずに コ ンパ イ ル さ れたプ ロ グ ラ ムの場合、 mb-ld リ ン カで crt0.o 初期化フ ァ イ ル が使用 さ れ、 例外ハン ド ラ での適切なア ド レ ス が設定 さ れます。 -xl-mode-xmdstub コ ンパ イ ラ オプシ ョ ン を使用 し て コ ンパ イ ル さ れたプ ロ グ ラ ムの場合、crt1.o 初 期化フ ァ イ ルが出力プ ロ グ ラ ムに リ ン ク さ れます。 こ のプ ロ グ ラ ムは、 ア ド レ ス ロ ケーシ ョ ン 0x0 に XMDStub が含まれてい る場合にのみ実行で き ます。 ラ ン タ イ ムには、 例外お よ び割 り 込みハン ド ラ のア ド レ ス に応 じ て、crt1.o の初期化 コー ド に よ り 適切な命令が ロ ケーシ ョ ン 0x8 ~ 0x14 に書 き込まれます。 例外お よ び割 り 込みハン ド ラ に制御を渡す コー ド を次に示 し ます。 0x00: 0x04: 0x08: 0x0c: 0x10: 0x14: 0x20: 0x24: bri nop 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 (HW exception handler _hw_exception_handler MicroBlaze では、32 ビ ッ ト で指定可能な ア ド レ ス ロ ケ ーショ ン であ れば、ど こ にでも 例外およ び 割り 込みハン ド ラ ルーチン を 配置でき ま す。 ユーザー例外ハン ド ラ のコ ード はラ ベル __handler で、ハー ド ウ ェ ア例外ハン ド ラ の コ ー ド は ラ ベル _hw__handler で、割 り 込みハン ド ラ の コー ド は ラ ベル _interrupt_handler で始ま り ます。 現段階の MicroBlaze シ ス テ ムでは、 割 り 込みお よ び例外処理に対 し てユーザーが変更可能なダ ミ ー ルーチンがあ り ます。 こ れ ら のダ ミ ー ルーチンの代わ り に、独自の割 り 込みハン ド ラ お よ び例 外ハン ド ラ を リ ン ク す る には、 割 り 込みハン ド ラ の コ ー ド を属性 interrupt_handler で定義す る必要 があ り ます。 割 り 込みハン ド ラ 属性の使用方法お よ び構文の詳細は、 『エンべデ ッ ド シ ス テ ム ツー ル リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 XMD (Xilinx Microprocessor Debug) ツールで ソ フ ト ウ ェ アのブ レー ク ポ イ ン ト が使用 さ れ る場合 は、ハー ド ウ ェ アお よ び ソ フ ト ウ ェ アのブ レー ク ア ド レ ス ロ ケーシ ョ ンは、 ソ フ ト ウ ェ アのブ レー ク ポ イ ン ト の処理用に予約 さ れています。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 119 第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI) 120 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 第4章 MicroBlaze 命令セ ッ ト アーキテ ク チ ャ こ の章では、MicroBlaze™ の命令セ ッ ト アーキ テ ク チ ャ について詳 し く 説明 し ます。次のセ ク シ ョ ン よ り 構成 さ れています。 • 表記法 • フ ォーマ ッ ト • 命令 表記法 こ の章で使用 さ れ る シ ン ボルの定義を表 4-1 に示 し ます。 表 4-1 : シ ンボル表記 シ ンボル 意味 + 加算 - 減算 × 乗算 ∧ ビ ッ ト 単位の論理積 (AND) ∨ ビ ッ ト 単位の論理和 (OR) ⊕ ビ ッ ト 単位の排他論理和 (XOR) x x のビ ッ ト 単位の論理補数 ← 代入 >> 右方向へシ フ ト << 左方向へシ フ ト rx レジス タ x x[i] レジ ス タ x のビ ッ ト i x[i:j] レジ ス タ x のビ ッ ト i ~ j = 等価 ≠ 非等価 > 大な り >= 以上 < 小な り <= 以下 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 121 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 表 4-1 : シ ンボル表記(続き ) シ ンボル 意味 sext(x) 符号拡張 x Mem(x) ア ド レ ス x の メ モ リ ロ ケーシ ョ ン FSLx FSL イ ン タ ーフ ェ イ ス x LSW(x) x の最下位ワ ー ド isDnz(x) 浮動小数点 : x が非正規化 さ れてい る場合に真 isInfinite(x) 浮動小数点 : x が +∞ ま たは -∞ の場合に真 isPosInfinite(x) 浮動小数点 : x が +∞ の場合に真 isNegInfinite(x) 浮動小数点 : x が -∞ の場合に真 isNaN(x) 浮動小数点 : x が quiet ま たは signalling NaN の場合に真 isZero(x) 浮動小数点 : x が +0 ま たは -0 の場合に真 isQuietNaN(x) 浮動小数点 : x が quiet NaN の場合に真 isSigNaN(x) 浮動小数点 : x が signaling NaN の場合に真 signZero(x) 浮動小数点 : x > 0 の場合は +0、 x < 0 の場合は -0 を返す signInfinite(x) 浮動小数点 : x > 0 の場合は +∞、 x < 0 の場合は -∞ を返す フ ォ ーマ ッ ト MicroBlaze では、 タ イ プ A と タ イ プ B と い う 2 つの命令フ ォーマ ッ ト が使用 さ れます。 タ イプ A タ イ プ A は、 レ ジ ス タ間の命令に使用 さ れます。 こ の タ イ プには、 opcode、 デス テ ィ ネーシ ョ ン レ ジ ス タ 1 個、 ソ ース レ ジ ス タ 2 個が含まれます。 opcode 0 デス テ ィ ネーシ ョ ン レジス タ 6 ソ ース レ ジ ス タ A 11 ソ ース レ ジ ス タ B 16 0 0 0 0 21 0 0 0 0 0 0 0 31 タ イプ B タ イ プ B は、レ ジ ス タ と 即値間の命令に使用 さ れます。 こ の タ イ プには、opcode、デス テ ィ ネーシ ョ ン レ ジ ス タ 1 個、 ソ ース レ ジ ス タ 1 個、 お よ び 16 ビ ッ ト の即値が含まれます。 opcode 0 122 デス テ ィ ネーシ ョ ン レジス タ 6 ソ ース レ ジ ス タ A 11 即値 16 japan.xilinx.com 31 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 命令 こ のセ ク シ ョ ンでは、 MicroBlaze の命令について説明 し ます。 命令は、 アルフ ァ ベ ッ ト 順に掲載 さ れてお り 、 各命令に対 し て簡略 コー ド 、 エン コー ド 、 説明、 命令セマ ン テ ィ ッ ク ス の擬似 コー ド 、 お よ びその命令で変更 さ れ る レ ジ ス タ の一覧が示 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 123 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ add 0 0 0 Arithmetic Add 0 add rD, rA, rB 加算 addc rD, rA, rB キ ャ リ ー付 き 加算 addk rD, rA, rB 加算 ( キ ャ リ ーを保持) addkc rD, rA, rB キ ャ リ ー付 き 加算 ( キ ャ リ ーを保持) K C 0 rD 6 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 レ ジ ス タ rA と rB の内容の合計を レ ジ ス タ rD に格納 し ます。 addk に対し て は、 命令のビ ッ ト 3 (図で K と 表記) が 1 に設定さ れま す。 addc に対し て は、 命令 のビ ッ ト 4 (図で C と 表記) が 1 に設定さ れま す。 addkc に対し て は、 両方のビ ッ ト が 1 に設定さ れま す。 ビ ッ ト 3 が 1 の場合 (addk、 addkc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値が 保持 さ れます。 ビ ッ ト 3 が 0 の場合 (add、 addc)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て変更 さ れます。 ビ ッ ト 4 が 1 の場合 (addc、addkc)、キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影響 し ます。 ビ ッ ト 4 が 0 の場合 (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 ク ロ ッ ク サイ クル メモ 命令 opcode 内の C ビ ッ ト は、 MSR のキ ャ リ ー ビ ッ ト と は異な り ます。 「add r0, r0, r0」 (= 0x00000000) 命令は、 コ ンパ イ ラ で使用 さ れ る こ と はな く 、 通常は初期化 さ れ ていない メ モ リ を示 し ます。 不正な命令の例外を使用 し てい る 場合、 MicroBlaze のパ ラ メ ー タ を C_OPCODE_0x0_ILLEGAL=1 に設定する と 、 こ れ ら の命令を ト ラ ッ プで き ます。 124 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 addi 0 0 0 Arithmetic Add Immediate 1 addi rD, rA, IMM 即値加算 addic rD, rA, IMM キ ャ リ ー付 き の即値加算 addik rD, rA, IMM 即値加算 ( キ ャ リ ーを保持) addikc rD, rA, IMM キ ャ リ ー付 き の即値加算 ( キ ャ リ ーを保持) K C 0 rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値の合計を、 レ ジ ス タ rD に 格納 し ます。 addik に対 し ては、 命令の ビ ッ ト 3 (図で K と 表記) が 1 に設定 さ れます。 addc に対 し ては、 命令の ビ ッ ト 4 (図で C と 表記) が 1 に設定 さ れます。 addikc に対 し ては、 両方の ビ ッ ト が 1 に設定 さ れます。 ビ ッ ト 3 が 1 の場合 (addik、 addikc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値 が保持 さ れます。 ビ ッ ト 3 が 0 の場合 (addi、 addic)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て変 更 さ れます。 ビ ッ ト 4 が 1 の場合 (addic、 addikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影響 し ま す。 ビ ッ ト 4 が 0 の場合 (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 ク ロ ッ ク サイ クル メモ 命令 opcode 内の C ビ ッ ト は、 MSR のキ ャ リ ー ビ ッ ト と は異な り ます。 デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 125 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ and Logical AND and 1 0 0 0 0 0 1 rD, rA, rB rD 6 rA 11 rB 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を AND 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ∧ (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル 126 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 andi Logical AND with Immediate andi 1 0 0 1 0 0 1 rD, rA, IMM rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を AND 演算 し 、 その結果 を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ∧ sext(IMM) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 127 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ andn Logical AND NOT andn 1 0 0 0 0 1 1 rD, rA, rB rD 6 rA 11 rB 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容の論理補数を AND 演算 し 、 その結果を レ ジ ス タ rD に格 納 し ます。 擬似 コ ー ド (rD) ← (rA) ∧ (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル 128 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 andni Logical AND NOT with Immediate andni 1 0 0 1 0 1 1 rD, rA, IMM rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値の論理補数を AND 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ∧ (sext(IMM)) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 129 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ beq 1 0 0 Branch if Equal 0 1 1 beq rA, rB 0 の場合に分岐 beqd rA, rB 0 の場合に分岐 (遅延ス ロ ッ ト を使用) 1 D 0 0 6 0 0 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 rA が 0 の場合、 rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB の命令です。 beqd に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 130 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 beqi 1 0 0 Branch Immediate if Equal 1 1 1 beqi rA, IMM 0 の場合に即値に分岐 beqid rA, IMM 0 の場合に即値に分岐 (遅延ス ロ ッ ト を使用) 1 D 0 0 0 6 0 rA 11 IMM 16 31 説明 rA が 0 の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM の命令です。 beqid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 131 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bge 1 0 0 Branch if Greater or Equal 0 1 1 bge rA, rB 0 以上の場合に分岐 bged rA, rB 0 以上の場合に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 1 6 0 1 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 rA が 0 以上の場合、rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐先は、ア ド レ ス PC + rB の命令です。 bged に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 132 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 bgei 1 0 0 Branch Immediate if Greater or Equal 1 1 1 bgei rA, IMM 0 以上の場合に即値に分岐 bgeid rA, IMM 0 以上の場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 1 0 6 1 rA 11 IMM 16 31 説明 rA が 0 以上の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM の命令です。 bgeid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 133 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bgt 1 0 0 Branch if Greater Than 0 1 1 bgt rA, rB 0 よ り 大き い場合に分岐 bgtd rA, rB 0 よ り 大き い場合に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 1 6 0 0 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 rA が 0 よ り 大 き い場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB の命令です。 bgtd に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 134 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 bgti 1 0 0 Branch Immediate if Greater Than 1 1 1 bgti rA, IMM 0 よ り 大き い場合に即値に分岐 bgtid rA, IMM 0 よ り 大き い場合に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 1 0 6 0 rA 11 IMM 16 31 説明 rA が 0 よ り 大 き い場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM の命令です。 bgtid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 135 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ ble 1 0 0 Branch if Less or Equal 0 1 1 ble rA, rB 0 以下の場合に分岐 bled rA, rB 0 以下の場合に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 0 6 1 1 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 rA が 0 以下の場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB の命令です。 bled に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 136 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 blei 1 0 0 Branch Immediate if Less or Equal 1 1 1 blei rA, IMM 0 以下の場合に即値に分岐 bleid rA, IMM 0 以下の場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 0 1 6 1 rA 11 IMM 16 31 説明 rA が 0 以下の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM の命令です。 bleid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 137 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ blt 1 0 Branch if Less Than 0 0 1 1 blt rA, rB 0 よ り 小 さ い場合に分岐 bltd rA, rB 0 よ り 小 さ い場合に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 0 6 1 0 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 rA が 0 よ り 小 さ い場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB の命令です。 bltd に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 138 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 blti 1 0 0 Branch Immediate if Less Than 1 1 1 blti rA, IMM 0 よ り 小 さ い場合に即値に分岐 bltid rA, IMM 0 よ り 小 さ い場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 0 1 6 0 rA 11 IMM 16 31 説明 rA が 0 未満の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM の命令です。 bltid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 139 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bne 1 0 0 Branch if Not Equal 0 1 1 bne rA, rB 0 でない場合に分岐 bned rA, rB 0 でない場合に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 0 6 0 1 rA 11 rB 16 0 0 0 0 0 21 0 0 0 0 0 0 31 説明 rA が 0 ではない場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + rB の命令です。 bned に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 140 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 bnei 1 0 0 Branch Immediate if Not Equal 1 1 1 bnei rA, IMM 0 でない場合に即値に分岐 bneid rA, IMM 0 でない場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用) 1 D 0 0 0 6 1 rA 11 IMM 16 31 説明 rA が 0 ではない場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス PC + IMM の命令です。 bneid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場 合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合) メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 141 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ br 1 0 Unconditional Branch 0 0 1 1 br rB 分岐 bra rB 絶対値に分岐 brd rB 分岐 (分岐遅延ス ロ ッ ト を使用) brad rB 絶対値に分岐 (分岐遅延ス ロ ッ ト を使用) brld rD, rB 分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用) brald rD, rB 絶対値に分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用) 0 rD 6 D A L 11 0 0 rB 16 0 0 0 0 0 0 0 0 0 21 0 0 31 説明 rB で指定 さ れた ア ド レ ス に含まれ る命令に分岐 し ます。 brld お よ び brald に対 し ては、L ビ ッ ト が 1 に設定 さ れます。 L ビ ッ ト が 1 の場合、 リ ン ク が実行 さ れ、 PC の現在の値が rD に格納 さ れます。 bra、 brad、 お よ び brald に対 し ては、 A ビ ッ ト が 1 に設定 さ れます。 A ビ ッ ト が 1 の場合は、 rB の 値を絶対値 と みな し 、 その値に分岐 し ます。 A ビ ッ ト が 0 の場合は、 相対分岐 と な り 、 分岐先は PC + rB と な り ます。 bra、 brad、 brld、 お よ び brald に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐 遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分 岐後の命令 (分岐遅延ス ロ ッ ト にあ る命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 擬似 コ ー ド 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 ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 0 の場合) 142 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 メモ 命令 brl お よ び bral は、 使用で き ません。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 143 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bri 1 0 Unconditional Branch Immediate 0 1 1 1 0 bri IMM 即値に分岐 brai IMM 即値の絶対値に分岐 brid IMM 即値に分岐 (分岐遅延ス ロ ッ ト を使用) braid IMM 即値の絶対値に分岐 (分岐遅延ス ロ ッ ト を使用) brlid rD, IMM 即値に分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用) bralid rD, IMM 即値の絶対値に分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用) rD 6 D A 11 L 0 0 IMM 16 31 説明 32 ビ ッ ト に符号拡張 さ れた IMM で指定 さ れ る ア ド レ ス に含まれてい る命令に分岐 し ます。 brlid お よ び bralid に対 し ては、 L ビ ッ ト が 1 に設定 さ れます。 L ビ ッ ト が 1 の場合、 リ ン ク が実行 さ れ、 PC の現在の値が rD に格納 さ れます。 brai、braid、お よ び bralid に対 し ては、A ビ ッ ト が 1 に設定 さ れます。 A ビ ッ ト が 1 の場合は、IMM の値を絶対値 と みな し 、 その値に分岐 し ます。 A ビ ッ ト が 0 の場合は、 相対分岐 と な り 、 分岐先は PC + IMM と な り ます。 brid、 braid、 brlid、 お よ び bralid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分 岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス ロ ッ ト にあ る命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。 MicroBlaze で MMU が使用 さ れ (C_USE_MMU >= 1) 、 brki rD, 0x18 を使用 し てユーザー ベ ク タ 例外が処理 さ れ る 場合は、MSR のユーザー モー ド ビ ッ ト お よ び仮想モー ド ビ ッ ト が 0 にな り ます。 擬似 コ ー ド 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 = 0x8 then MSR[UMS] ←MSR[UM] MSR[VMS] ←MSR[VM] MSR[UM] ←0 MSR[VM] ←0 144 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 変更 さ れる レ ジ ス タ • rD • PC • MSR[UM]、 MSR[VM] レ イテンシ 2 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 1 の場合) 3 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 0 の場合) メモ 命令 brli お よび brali は、 使用で き ません。 デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 145 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ brk Break brk 1 0 0 0 1 1 0 rD, rB 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 フ ラ グが 1 にな り 、 予約ビ ッ ト は ク リ アにな り ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] == 1 then ESR[EC] ← 00111 else (rD) ← PC PC ← (rB) MSR[BIP] ← 1 Reservation ←0 変更 さ れる レ ジ ス タ • rD • PC • MSR[BIP] • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 3 ク ロ ッ ク サイ クル 146 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 brki Break Immediate brki 1 0 0 1 1 1 0 rD 6 rD, IMM 0 11 1 1 0 0 IMM 16 31 説明 32 ビ ッ ト に符号拡張 さ れた IMM のア ド レ ス値に格納 さ れてい る命令に分岐、リ ン ク し ます。 PC の 現在の値が rD に格納 さ れます。 MSR の BIP フ ラ グが 1 に設定 さ れ、予約ビ ッ ト が ク リ アにな り ま す。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1)、brki rD, 0x8 ま たは brki rD, 0x18 を使用 し て ソ フ ト ウ ェ ア ブ レー ク が実行 さ れ る 場合を除いて こ の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 MicroBlaze で MMU が使用 さ れ (C_USE_MMU >= 1) 、 bralid rD, 0x8 を使用 し てユーザー ベ ク タ 例外が処理 さ れ る 場合は、MSR のユーザー モー ド ビ ッ ト お よ び仮想モー ド ビ ッ ト が 0 にな り ます。 擬似 コ ー ド if MSR[UM] = 1 and IMM ≠ 0x8 and IMM ≠ 0x18 then ESR[EC] ← 00111 else (rD) ← PC PC ← sext(IMM) MSR[BIP] ←1 Reservation ←0 if IMM = 0x8 or IMM = 0x18 then MSR[UMS] ←MSR[UM] MSR[VMS] ←MSR[VM] MSR[UM] ←0 MSR[VM] ←0 変更 さ れる レ ジ ス タ • rD (例外が発生 し た場合は変更な し ) • PC • MSR[BIP]、 MSR[UM]、 MSR[VM] • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 3 ク ロ ッ ク サイ クル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 147 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ bs 0 0 Barrel Shift 1 0 0 0 bsrl rD, rA, rB 論理バレ ル シ フ ト ラ イ ト bsra rD, rA, rB 算術バレ ル シ フ ト ラ イ ト bsll rD, rA, rB 論理バレ ル シ フ ト レ フ ト 1 rD 6 rA 11 rB 16 S T 21 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rB で指定 さ れた分だけ レ ジ ス タ rA の内容を シ フ ト し 、 その結果を レ ジ ス タ rD に格納 し ます。 bsll に対 し ては、 S ビ ッ ト (サ イ ド ビ ッ ト ) が 1 に設定 さ れます。 S ビ ッ ト が 1 の場合は、 左側への シ フ ト が実行 さ れます。 bsrl お よ び bsra に対 し ては S ビ ッ ト は 0 に設定 さ れ、右側へのシ フ ト が実 行 さ れます。 bsra に対し て は、 T ビ ッ ト (タ イ プ ビ ッ ト ) が 1 に設定さ れま す。 T ビ ッ ト が 1 の場合、 算術シ フ ト が実行さ れま す。 bsrl およ び bsll に対し て は T ビ ッ ト は 0 に設定さ れ、論理シ フ ト が実行さ れま す。 擬似 コ ー ド 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 レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ こ れ ら の命令は、 オプシ ョ ンです。 MicroBlaze でパ ラ メ ー タ C_USE_BARREL が 1 に設定 さ れて い る 場合にのみ使用可能です。 148 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 bsi 0 0 1 Barrel Shift Immediate 1 0 0 bsrli rD, rA, IMM 論理バレ ル シ フ ト ラ イ ト (即値を使用) bsrai rD, rA, IMM 算術バレ ル シ フ ト ラ イ ト (即値を使用) bslli rD, rA, IMM 論理バレ ル シ フ ト レ フ ト (即値を使用) 1 rD 6 rA 11 0 0 0 0 0 16 S T 21 0 0 0 0 IMM 27 31 説明 IMM で指定 さ れた分だけ レ ジ ス タ rA の内容を シ フ ト し 、 その結果を レ ジ ス タ rD に格納 し ます。 bslli に対 し ては、 S ビ ッ ト (サ イ ド ビ ッ ト ) が 1 に設定 さ れます。 S ビ ッ ト が 1 の場合は、 左側への シ フ ト が実行 さ れます。 bsrli お よ び bsrai に対 し ては S ビ ッ ト は 0 に設定 さ れ、 右側へのシ フ ト が 実行 さ れます。 bsrai に対 し ては、 T ビ ッ ト ( タ イ プ ビ ッ ト ) が 1 に設定 さ れます。 T ビ ッ ト が 1 の場合、 算術シ フ ト が実行 さ れます。 bsrli お よ び bslli に対 し ては T ビ ッ ト は 0 に設定 さ れ、論理シ フ ト が実行 さ れま す。 擬似 コ ー ド 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 レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ こ れ ら は、 タ イ プ B 命令ではあ り ません。 こ れ ら の命令の前に imm 命令を実行 し て も 、影響はあ り ません。 こ れ ら の命令は、 オプシ ョ ンです。 MicroBlaze でパ ラ メ ー タ C_USE_BARREL が 1 に設定 さ れて い る 場合にのみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 149 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ cmp 0 0 0 Integer Compare 0 1 0 cmp rD, rA, rB rB を rA と 比較 (符号付 き ) cmpu rD, rA, rB rB を rA と 比較 (符号な し ) 1 rD 6 rA rB 11 16 0 0 0 0 0 0 0 0 0 U 1 21 31 説明 レ ジ ス タ rB の内容か ら レ ジ ス タ rA の内容を減算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 rD の MSB ビ ッ ト は、 rA と rB の関係が真であ る か ど う かを示す よ う 調整 さ れます。 U ビ ッ ト が 1 の場合、 rA と rB は符号な し の値 と みな さ れます。 U ビ ッ ト が 0 の場合、 rA と rB は符号付 き の値 と みな さ れます。 擬似 コ ー ド (rD) ← (rB) + (rA) + 1 (rD)(MSB) ←(rA) > (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル 150 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 fadd Floating Point Arithmetic Add fadd 0 0 1 0 1 1 0 rD, rA, rB rD 6 加算 rA 11 rB 16 0 0 0 0 21 0 0 0 0 0 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)) and 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] レ イテンシ C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル メモ こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る 場合にの み使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 151 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ frsub Reverse Floating Point Arithmetic Subtraction frsub 0 0 1 0 1 1 0 rD, rA, rB rD 6 逆減算 rA 11 rB 16 0 0 0 1 21 0 0 0 0 0 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 (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] レ イテンシ C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル メモ こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る 場合にの み使用可能です。 152 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 fmul Floating Point Arithmetic Multiplication fmul 0 0 1 0 1 1 0 rD, rA, rB rD 6 乗算 rA 11 rB 16 0 21 0 1 0 0 0 0 0 0 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] レ イテンシ C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル メモ こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る 場合にの み使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 153 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fdiv Floating Point Arithmetic Division fdiv 0 0 1 0 1 1 0 rD, rA, rB rD 6 除算 rA rB 11 16 0 0 1 1 0 0 0 0 0 0 21 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] ←1 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] レ イテンシ C_AREA_OPTIMIZED=0 の場合 28 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 30 ク ロ ッ ク サ イ ク ル 154 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 メモ こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る場合にの み使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 155 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fcmp 0 0 1 Floating Point Number Comparison 0 1 1 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 浮動小数点の以上比較 0 rD 6 rA 11 rB 16 0 21 1 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 { 表 4-2 の演算を参照 } 変更 さ れる レ ジ ス タ • rD (FP 例外が発生 し た場合は変更な し ) • ESR[EC] (FP 例外が発生 し た場合) • FSR[IO,DO] レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル メモ こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る場合にの み使用可能です。 157 ページの表 4-2 に、 浮動小数点比較演算を示 し ます。 156 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 表 4-2 : 浮動小数点の比較演算 比較 タ イ プ 説明 順序付けな し オペ ラ ン ド の関係 OpSel 000 (rB) > (rA) (rD) ←0 (rB) < (rA) (rD) ←0 (rB) = (rA) (rD) ←0 isSigNaN(rA) または isSigNaN(rB) (rD) ←1 isQuietNaN(rA) または isQuietNaN(rB) (rD) ←1 FSR[IO] ←1 ESR[EC] ←00110 小な り 等価 001 010 (rD) ←0 (rD) ←0 (rD) ←1 (rD) ←0 (rD) ←0 (rD) ←1 (rD) ←0 (rD) ←0 FSR[IO] ←1 FSR[IO] ←1 ESR[EC] ←00110 ESR[EC] ←00110 (rD) ←0 (rD) ←0 FSR[IO] ←1 ESR[EC] ←0011 以下 大な り 非等価 011 100 101 (rD) ←0 (rD) ←1 (rD) ←1 (rD) ←1 (rD) ←0 (rD) ←1 (rD) ←1 (rD) ←0 (rD) ←0 (rD) ←0 (rD) ←0 FSR[IO] ←1 FSR[IO] ←1 ESR[EC] ←00110 ESR[EC] ←00110 (rD) ←0 (rD) ←0 FSR[IO] ←1 FSR[IO] ←1 ESR[EC] ←00110 ESR[EC] ←00110 (rD) ←1 (rD) ←1 FSR[IO] ←1 ESR[EC] ←0011 以上 110 (rD) ←1 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) (rD) ←0 (rD) ←1 japan.xilinx.com (rD) ←0 (rD) ←0 FSR[IO] ←1 FSR[IO] ←1 ESR[EC] ←00110 ESR[EC] ←00110 157 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ flt Floating Point Convert Integer to Float flt 0 0 1 0 1 1 0 rD, rA rD 6 rA 11 0 16 0 21 1 0 1 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の符号付 き整数を浮動小数点値に変換 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ れ は 32 ビ ッ ト の符号付 き繰 り 上げ/繰 り 下げ変換で、 結果は 32 ビ ッ ト の浮動小数点値にな り ます。 擬似 コ ー ド (rD) ← float ((rA)) 変更 さ れる レ ジ ス タ • rD レ イテンシ C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル メモ こ の命令は、MicroBlaze でパラ メ ータ C_USE_FPU が 2 に設定さ れて いる 場合にのみ使用可能で す。 158 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 fint Floating Point Convert Float to Integer fint 0 0 1 0 1 1 0 rD, rA rD 6 rA 0 11 16 0 1 1 0 0 0 21 0 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,UF,OF,DO] レ イテンシ C_AREA_OPTIMIZED=0 の場合 5 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 7 ク ロ ッ ク サ イ ク ル メモ こ の命令は、MicroBlaze でパラ メ ータ C_USE_FPU が 2 に設定さ れて いる 場合にのみ使用可能で す。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 159 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ fsqrt Floating Point Arithmetic Square Root fsqrt 0 0 1 0 1 1 0 rD, rA rD 6 平方根 rA 0 11 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,UF,OF,DO] レ イテンシ C_AREA_OPTIMIZED=0 の場合 27 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 29 ク ロ ッ ク サ イ ク ル メモ こ の命令は、MicroBlaze でパラ メ ータ C_USE_FPU が 2 に設定さ れて いる 場合にのみ使用可能で す。 160 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 get 0 0 1 get from fsl interface 1 0 1 1 tneaget rD, FSLx FSL x か ら デー タ を読み出 し t : テ ス ト のみ n : ノ ンブ ロ ッ キ ン グ e : 制御ビ ッ ト が 1 の場合例外 a : 不可分 tnecaget rD, FSLx FSL x か ら 制御を読み出 し t : テ ス ト のみ n : ノ ンブ ロ ッ キ ン グ e : 制御ビ ッ ト が 0 の場合例外 a : 不可分 rD 6 0 0 0 0 11 0 0 n c t a e 0 0 0 16 0 0 0 FSLx 28 31 説明 FSLx イ ン タ ーフ ェ イ ス か ら 読み出 し た値を レ ジ ス タ rD に格納 し ます。 get 命令には、 32 種類あ り ます。 ブ ロ ッ キ ン グの get 命令 (n ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ ス か ら 有効なデー タ が取得 さ れ る ま での間 MicroBlaze を ス ト ール し ます。 ノ ンブ ロ ッ キ ン グの get 命令では MicroBlaze は ス ト ー ル さ れず、 デー タ が有効な場合はキ ャ リ ーが 0 に、 無効の場合は 1 にな り ます。 ア ク セ ス が無効な 場合は、 デス テ ィ ネーシ ョ ン レ ジ ス タ の内容は定義 さ れません。 すべてのデー タ get 命令 (c ビ ッ ト が 0) では、 FSL イ ン ターフ ェ イ ス の制御ビ ッ ト が 0 であ る こ と が想定 さ れます。 0 ではない場合は、MSR[FSL_Error] が 1 に設定 さ れます。 すべての制御 get 命令 (c ビ ッ ト が 1) では、FSL イ ン タ ーフ ェ イ ス の制御ビ ッ ト が 1 であ る こ と が想定 さ れます。1 でない 場合は、 MSR[FSL_Error] が 1 に設定 さ れます。 例外の get 命令 (e ビ ッ ト が 1) では、制御ビ ッ ト の不一致があ る場合に例外が生成 さ れます。 こ の場 合、 ESR で EC に例外の原因が、 ESS に FSL イ ンデ ッ ク ス が設定 さ れます。 例外が発生 し た場合、 タ ーゲ ッ ト レ ジ ス タ rD はア ッ プデー ト さ れず、 FSL デー タ が EDR に格納 さ れます。 テ ス ト の get 命令 (t ビ ッ ト が 1) は、FSL リ ン ク への読み出 し 信号がアサー ト さ れない点を除 き、通 常どお り 処理 さ れます。 不可分の get 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ化 さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 161 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] ← 00111 else (rD) ← FSLx if (n = 1) then MSR[Carry] ← not (FSLx Exists bit) if (FSLx Control bit ≠ c) and (FSLx Exists bit) then MSR[FSL_Error] ←1 if (e = 1) then ESR[EC] ←00000 ESR[ESS] ←instruction bits [28:31] EDR ←FSLx 変更 さ れる レ ジ ス タ • rD (例外が発生 し た場合は変更な し ) • MSR[FSL_Error] • MSR[Carry] • ESR[EC] (FSL 例外ま たは特権命令例外が発生 し た場合) • ESR[ESS] (FSL 例外が発生 し た場合) • EDR (FSL 例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル ブ ロ ッ キ ン グの get 命令では、命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール し ます。 割 り 込みは、 パ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れ、 命令が不可分 でない場合に実行 さ れます。 メモ アセ ンブ リ 言語で FSLx イ ン タ ーフ ェ イ ス を参照す る には、 rfsl0, rfsl1, ... rfsl15 を使用 し ます。 ブ ロ ッ キ ン グの get 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、 パ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合は、 こ の命令を遅延ス ロ ッ ト に含め る こ と がで き ません。 ノ ンブ ロ ッ キ ン グの get 命令では、 rsubc 命令を使用 し て、 イ ンデ ッ ク ス変数をデ ク リ メ ン ト で き ま す。 C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合を除 き 、 e ビ ッ ト の設定は影響 し ません。 こ れ ら の命令は、 MicroBlaze でパ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れてい る 場 合にのみ使用可能です。 拡張命令 (例外、 テ ス ト 、 お よ び不可分の get 命令) は、 パ ラ メ ー タ C_USE_EXTENDED_FSL_ INSTR が 1 に設定 さ れてい る場合にのみ使用可能です。 162 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 getd 0 0 1 get from fsl interface dynamic 0 0 1 1 tneagetd rD, rB FSL rB[28:31] か ら デー タ を読み出 し t : テ ス ト のみ n : ノ ンブ ロ ッ キ ン グ e : 制御ビ ッ ト が 1 の場合例外 a : 不可分 tnecagetd rD, rB FSL rB[28:31] か ら 制御を読み出 し t : テ ス ト のみ n : ノ ンブ ロ ッ キ ン グ e : 制御ビ ッ ト が 0 の場合例外 a : 不可分 rD 6 0 0 0 0 0 11 rB 16 0 21 n c t a e 0 0 0 0 0 31 説明 rB の下位 4 ビ ッ ト で定義 さ れた FSL イ ン タ ーフ ェ イ ス か ら 読み出 し た結果が、レ ジ ス タ rD に格納 さ れます。 getd 命令には、 32 種類あ り ます。 ブ ロ ッ キ ン グ デー タ の getd 命令 (n ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ ス か ら 有効なデー タ が 取得 さ れ る ま での間 MicroBlaze を ス ト ール し ます。 ノ ンブ ロ ッ キ ン グ デー タ の getd 命令では MicroBlaze は ス ト ール さ れず、デー タ が有効な場合はキ ャ リ ーが 0 に、無効の場合は 1 にな り ます。 ア ク セ ス が無効な場合は、 デス テ ィ ネーシ ョ ン レ ジ ス タ の内容は定義 さ れません。 すべてのデー タ getd 命令 (c ビ ッ ト が 0) では、FSL イ ン タ ーフ ェ イ ス の制御ビ ッ ト が 0 であ る こ と が想定 さ れます。 0 ではない場合は、 MSR[FSL_Error] が 1 に設定 さ れます。 すべての制御 getd 命 令 (c ビ ッ ト が 1) では、 FSL イ ン ターフ ェ イ ス の制御ビ ッ ト が 1 であ る こ と が想定 さ れます。 1 で ない場合は、 MSR[FSL_Error] が 1 に設定 さ れます。 例外の getd 命令 (e ビ ッ ト が 1) では、 制御ビ ッ ト の不一致があ る場合に例外が生成 さ れます。 こ の 場合、ESR で EC に例外の原因が、ESS に FSL イ ンデ ッ ク ス が設定 さ れます。 例外が発生 し た場合、 タ ーゲ ッ ト レ ジ ス タ rD はア ッ プデー ト さ れず、 FSL デー タ が EDR に格納 さ れます。 テ ス ト の getd 命令 (t ビ ッ ト が 1) は、FSL リ ン ク への読み出 し 信号がアサー ト さ れない点を除 き、通 常どお り 処理 さ れます。 不可分の getd 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ 化 さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 163 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] ← 00111 else (rD) ← (FSL rB[28:31]) if (n = 1) then MSR[Carry] ← not (FSL rB[28:31] Exists bit) if (FSL rB[28:31] Control bit ≠ c) and (FSL rB[28:31] Exists bit) then MSR[FSL_Error] ←1 if (e = 1) then ESR[EC] ←00000 ESR[ESS] ←rB[28:31] EDR ←(FSL rB[28:31]) 変更 さ れる レ ジ ス タ • rD (例外が発生 し た場合は変更な し ) • MSR[FSL_Error] • MSR[Carry] • ESR[EC] (FSL 例外ま たは特権命令例外が発生 し た場合) • ESR[ESS] (FSL 例外が発生 し た場合) • EDR (FSL 例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル ブ ロ ッ キ ン グの getd 命令では、 命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール し ます。 割 り 込みは、 命令が不可分 (割 り 込み不可) ではない場合に実行 さ れます。 メモ ブ ロ ッ キ ン グの getd 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、こ の命令を遅 延ス ロ ッ ト に含め る こ と がで き ません。 ノ ンブ ロ ッ キ ン グの getd 命令では、 rsubc 命令を使用 し て、 イ ンデ ッ ク ス変数をデ ク リ メ ン ト で き ます。 C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合を除 き 、 e ビ ッ ト の設定は影響 し ません。 こ れ ら の命令は、 パ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れ、 パ ラ メ ー タ C_USE_ EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 164 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 idiv 0 0 1 Integer Divide 0 0 1 idiv rD, rA, rB rB を rA で除算(符号付 き ) idivu rD, rA, rB rB を rA で除算 (符号な し ) 0 rD 6 rA rB 11 16 0 0 0 0 0 0 0 0 0 U 0 21 31 説明 レ ジ ス タ rB の内容を レ ジ ス タ rA の内容で除算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 U ビ ッ ト が 1 の場合、 rA と rB は符号な し の値 と みな さ れます。 U ビ ッ ト が 0 の場合、 rA と rB は 符号付 き の値 と みな さ れます。 rA の値が 0 の場合、 例外が発生 し ない限 り 、 MSR の DZO ビ ッ ト が 1 にな り 、 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] (rA の値が 0 の場合) • ESR[EC] (rA の値が 0 の場合) レ イテンシ (rA) = 0 の場合 1 ク ロ ッ ク サ イ ク ル、それ以外は C_AREA_OPTIMIZED=0 の場合 32 ク ロ ッ ク サ イ クル (rA) = 0 の場合 1 ク ロ ッ ク サ イ ク ル、それ以外は C_AREA_OPTIMIZED=1 の場合 34 ク ロ ッ ク サ イ クル メモ こ の命令は、MicroBlaze でパラ メ ータ C_USE_DIV が 1 に設定さ れて いる 場合にのみ使用可能で す。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 165 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ imm Immediate imm 1 0 0 1 1 0 0 0 0 0 6 IMM 0 0 0 0 0 0 11 0 IMM 16 31 説明 imm 命令は、 IMM の値を一時レ ジ ス タ に読み込み、次の命令で 32 ビ ッ ト の即値を形成で き る よ う に、 こ の値を ロ ッ ク し ます。 imm 命令は、 タ イ プ B 命令 と 共に使用 し ます。 タ イ プ B 命令では 16 ビ ッ ト の即値フ ィ ール ド し か ないため、 32 ビ ッ ト の即値は直接使用で き ませんが、 MicroBlaze では 32 ビ ッ ト の即値を使用で き ます。 デフ ォル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、即値オペ ラ ン ド と し て使用 し ます。タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 imm 命令は、 16 ビ ッ ト の IMM 値を次の命令で使用で き る よ う 一時的に ロ ッ ク し ます。 こ の imm 命令の直後に タ イ プ B 命令を実行す る と 、 こ の imm 命令 の 16 ビ ッ ト の IMM 値 (上位 16 ビ ッ ト ) と タ イ プ B 命令の 16 ビ ッ ト の IMM 値 (下位 16 ビ ッ ト ) か ら 32 ビ ッ ト の即値が形成 さ れます。 imm 命令の後に タ イ プ B 命令が実行 さ れない場合は、 ロ ッ ク さ れた値は解除 さ れます。 レ イテンシ 1 ク ロ ッ ク サイ クル メモ imm 命令お よ び後続の タ イ プ B 命令は不可分のため、こ の 2 つの命令の間にほかの命令を割 り 込ま せ る こ と はで き ません。 ザ イ リ ン ク ス で提供す る アセンブ ラ では、 imm 命令が必要であ る こ と が自動的に検出 さ れます。 32 ビ ッ ト の IMM 値が タ イ プ B 命令で指定 さ れてい る場合、 アセンブ ラ で IMM 値が 16 ビ ッ ト の 値に変換 さ れ、 実行フ ァ イ ルでその命令の前に imm 命令が挿入 さ れます。 166 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 lbu Load Byte Unsigned lbu 1 0 1 0 0 0 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 0 21 0 31 説明 レ ジ ス タ rA と rB を加算 し た結果の メ モ リ ロ ケーシ ョ ンか ら 1 バ イ ト (8 ビ ッ ト ) 読み込みます。 デー タ はレ ジ ス タ rD の最下位バ イ ト に格納 さ れ、 その他の 3 バ イ ト は ク リ ア さ れます。 デー タ 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] (デー タ 格納例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 167 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lbui Load Byte Unsigned Immediate lbui 1 0 1 1 0 0 0 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM 値を加算 し た結果の メ モ リ ロ ケーシ ョ ン か ら 1 バ イ ト (8 ビ ッ ト ) 読み込みます。 デー タ は レ ジ ス タ 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] (デー タ 格納例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 168 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 lhu Load Halfword Unsigned lhu 1 0 1 0 0 0 1 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 0 21 0 31 説明 レ ジ ス タ rA と rB を加算 し た結果を、ハーフ ワー ド で揃え た メ モ リ ロ ケーシ ョ ンか ら 1 ハーフ ワ ー ド (16 ビ ッ ト ) 読み込みます。 デー タ はレ ジ ス タ rD の下位ハーフ ワ ー ド に格納 さ れ、 上位ハーフ ワ ー ド は ク リ ア さ れます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (TLB ミ ス例外ま たはデー タ 格納例外が発 生 し た場合) • ESR[EC]、 ESR[S] (例外が発生 し た場合) • ESR[DIZ] (デー タ 格納例外が発生 し た場合) • ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 169 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lhui Load Halfword Unsigned Immediate lhui 1 0 1 1 0 0 1 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM 値を加算 し た結果をハーフ ワ ー ド で揃え た メ モ リ ロ ケーシ ョ ンか ら 1 ハーフ ワー ド (16 ビ ッ ト ) 読み込みます。 デー タ はレ ジ ス タ rD の下位 ハーフ ワ ー ド に格納 さ れ、 上位ハーフ ワ ー ド は ク リ ア さ れます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 こ れは、 ユーザー モー ド お よ び仮想保護モー ド が イ ネーブ ルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る 例外は、 ア ド レ ス の最下位 ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 170 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 171 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lw Load Word lw 1 0 1 0 0 1 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 0 21 0 31 説明 レ ジ ス タ rA と rB を加算 し た結果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンか ら 1 ワー ド (32 ビ ッ ト ) 読み込みます。 デー タ は、 レ ジ ス タ rD に格納 さ れます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル 172 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 lwi Load Word Immediate lwi 1 0 1 1 0 1 0 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM 値を加算 し た結果を ワー ド で揃え たメ モリ ロ ケ ーシ ョ ン から 1 ワ ード (16 ビ ッ ト ) 読み込みま す。 データ は、 レ ジ ス タ rD に格納さ れま す。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 こ れは、 ユーザー モー ド お よ び仮想保護モー ド が イ ネーブ ルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る 例外は、 ア ド レ ス の最下位 ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 173 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ lwx Load Word Exclusive lwx 1 1 0 0 1 0 0 rD, rA, rB rD 6 rA 11 rB 16 1 0 0 0 0 0 0 0 0 0 0 21 31 説明 レ ジ ス タ rA と rB を加算 し た結果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンか ら 1 ワー ド (32 ビ ッ ト ) 読み込みます。 デー タ はレ ジ ス タ rD に配置 さ れ、 予約ビ ッ ト はセ ッ ト さ れ、 キ ャ リ ー フ ラ グ (MSR[C]) は ク リ アにな り ます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 であ っ て も 発生 し ません。 擬似 コ ー ド 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) ← Mem(Addr); Reservation ← 1; MSR[C] ← 0 変更 さ れる レ ジ ス タ • rD お よ び MSR[C] (例外が発生 し ない場合)、 例外が発生 し た場合は変更な し • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発 生 し た場合) • ESR[EC]、 ESR[S] (例外が発生 し た場合) • ESR[DIZ] (デー タ 格納例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1の場合 2 ク ロ ッ ク サ イ ク ル メモ こ の命令は STX と 共に使用 し て、 セマ フ ォやス ピ ン ロ ッ ク な ど排他的ア ク セ ス を イ ンプ リ メ ン ト す る ために使用 し ます。 174 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 mfs Move From Special Purpose Register mfs 1 0 0 0 1 0 1 rD 6 rD, rS 0 0 0 0 11 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 0x1000 : (rD) ← PID case 0x1001 : (rD) ← ZPR case 0x1002 : (rD) ← TLBX case 0x1003 : (rD) ← TLBLO case 0x1004 : (rD) ← TLBHI case 0x200x : (rD) ← PVR[x] (x = 0 ~ 11) default : (rD) ← Undefined 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ アセ ンブ リ 言語で特殊用途レ ジ ス タ を参照す る には、PC では rpc、MSR では rmsr、EAR では rear、 ESR では resr、FSR では rfsr、BTR では rbtr、EDR では redr、PID では rpid、ZPR では rzpr、TLBLO では rtlblo、 TLBHI では rtlbhi、 TLBX では rtlbx、 PVR0 ~ PVR11 では rpvr0 ~ rpvr11 を使用 し て く だ さ い。 MSR の値には、 パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていな い場合 も あ り ます。 MSR に影響 し ない命令は、 MFS 命令の前に実行 し 、 正 し い MSR 値が得 ら れ る よ う にす る 必要があ り ます。 FSR の値には、パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていない 場合 も あ り ます。 FSR に影響 し ない命令は、 MFS 命令の前に実行 し 、 正 し い FSR 値が得 ら れ る よ う にす る 必要があ り ます。 EAR、 ESR お よ び BTR は、 MicroBlaze で C_*_ EXCEPTION パ ラ メ ー タ の少な く と も 1 つが 1 に設定 さ れてい る 場合にのみオペ ラ ン ド と し て使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 175 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ EDR は、 C_FSL_EXCEPTION パ ラ メ ー タ が 1 に、 C_FSL_LINKS パ ラ メ ー タ が 0 よ り 大 き い値 に設定 さ れてい る 場合にのみオペ ラ ン ド と し て使用可能です。 FSR は、C_USE_FPU パ ラ メ ー タ が 0 よ り 大 き い値に設定 さ れてい る場合にのみオペ ラ ン ド と し て 使用可能です。 PID、 ZPR、 TLBLO お よ び TLBHI は、 C_USE_MMU > 1 お よ び C_MMU_TLB_ACCESS = 1 ま たは 3 の場合にのみオペ ラ ン ド と し て使用可能です。 TLBX は C_USE_MMU > 1 お よ び C_MMU_TLB_ACCESS > 0 の場合にのみオペ ラ ン ド と し て 使用可能です。 PVR0 は C_PVR が 1 ま たは 2 に、 PVR1 ~ PVR11 は C_PVR が 2 に設定 さ れてい る 場合にのみ オペ ラ ン ド と し て使用可能です。 176 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 msrclr Read MSR and clear bits in MSR msrclr 1 0 0 0 1 0 1 rD 6 rD, Imm 1 0 0 0 1 11 0 Imm15 16 17 31 説明 特殊用途の レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。IMM 値が 1 であ る ビ ッ ト 位置は、 MSR で ク リ ア さ れます。 IMM 値が 0 であ る ビ ッ ト 位置は、 その ま ま にな り ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1)、IMM 値が C のみに影響す る場合を 除いて こ の命令は特権命令IMM 値が C のみに影響す る場合を除いて こ の命令は特権命令にな り と な り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 and IMM ≠ 0x4 then ESR[EC] ← 00111 else (rD) ← (MSR) (MSR) ← (MSR) ∧ (IMM)) 変更 さ れる レ ジ ス タ • rD • MSR • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 1 ク ロ ッ ク サイ クル メモ MSRCLR を実行す る と 、 キ ャ リ ー ビ ッ ト はすぐ に変化 し ますが、 その他の ビ ッ ト は命令が実行 さ れてか ら 1 ク ロ ッ ク サ イ ク ル後に変化 し ます。 IE ビ ッ ト が ク リ ア さ れた場合、プ ロ セ ッ サはその後 の命令の割 り 込みには反応 し ません。 MSR の値には、 パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていな い場合 も あ り ます。 MSR に影響 し ない命令は、 MSRCLR 命令の前に実行 し 、 正 し い 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 プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 177 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ msrset Read MSR and set bits in MSR msrset 1 0 0 0 1 0 1 rD 6 rD, Imm 1 0 0 0 0 11 0 Imm15 16 17 31 説明 特殊用途の レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。IMM 値が 1 であ る ビ ッ ト 位置は、 MSR でセ ッ ト さ れます。 IMM 値が 0 であ る ビ ッ ト 位置は、 その ま ま にな り ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1)、IMM 値が C のみに影響す る場合を 除いて こ の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が 発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 and IMM ≠ 0x4 then ESR[EC]← 00111 else (rD) ← (MSR) (MSR) ← (MSR) ∨ (IMM) 変更 さ れる レ ジ ス タ • rD • MSR • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 1 ク ロ ッ ク サイ クル メモ MSRSET を 実行する と 、キャ リ ー ビ ッ ト はすぐ に変化し ま すが、その他のビ ッ ト は命令が実行さ れ てから 1 ク ロ ッ ク サイ ク ル後に変化し ま す。 EIP ビ ッ ト ま たは BIP ビ ッ ト がオン に設定さ れた場 合、 プロ セッ サはその後の命令の割り 込みおよ び通常のハード ウ ェ ア ブレ ーク には反応し ま せん。 MSR の値には、 パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていな い場合 も あ り ます。 MSR に影響 し ない命令は、 MSRSET 命令の前に実行 し 、 正 し い 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 の よ う な同期分岐命令が必要です。 178 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 mts Move To Special Purpose Register mts 1 0 0 0 1 0 1 0 0 rS, rA 0 0 6 0 rA 11 1 1 16 rS 18 31 説明 レ ジ ス タ rD の内容を特殊用途レ ジ ス タ rS に コ ピー し ます。 特殊用途レ ジ ス タ TLBLO お よ び TLBHI は、 イ ンデ ッ ク ス が TLBX であ る 統合 TLB のエン ト リ への コ ピーに使用 さ れます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] ← 00111 else switch (rS) case 0x0001 : MSR ← (rA) case 0x0007 : FSR ← (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) 変更 さ れる レ ジ ス タ • rS • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 1 ク ロ ッ ク サイ クル メモ MTS を使用 し て MSR に書 き込む と 、すべての ビ ッ ト は命令が実行 さ れてか ら 1 ク ロ ッ ク サ イ ク ル 後に変化 し ます。 MSR を書 き込む MTS 命令は MSR のデー タ を使用す る ほかの命令 と 連続 し て実 行 し ないで く だ さ い。 IE ビ ッ ト が ク リ ア さ れた場合、 プ ロ セ ッ サはその後の命令の割 り 込みには反 応 し ません。 EIP ビ ッ ト ま たは BIP ビ ッ ト がオンに設定 さ れた場合、 プ ロ セ ッ サはその後の命令の 割 り 込みお よ び通常のハー ド ウ ェ ア ブ レー ク には反応 し ません。 アセ ンブ リ 言語で特殊用途レ ジ ス タ を参照す る には、MSR では rmsr、FSR では rfsr、PID では rpid、 ZPR では rzpr、 TLBLO では rtlblo、 TLBHI では rtlbhi、 TLBX では rtlbx、 TLBSX では rtlbsx を 使用 し て く だ さ い。 PC、ESR、EAR、 BTR、EDR、PVR0 ~ PVR11は、MTS 命令を使用 し て書 き込む こ と はで き ません。 FSR は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る場合にのみデ ス テ ィ ネーシ ョ ン と し て使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 179 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ PID、 ZPR、 お よ び TLBSX は、 C_USE_MMU > 1 お よ び C_MMU_TLB_ACCESS > 1 の場合に のみデス テ ィ ネーシ ョ ン と し て使用可能です。 TLBLO、 TLBHI、 お よ び TLBX は、 C_USE_MMU > 1 の場合にのみデス テ ィ ネーシ ョ ン と し て使用可能です。 MSR[VM] ま たは PID を変更す る場合、 命令の後に BRI 4 の よ う な同期分岐命令が必要です。 180 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 mul Multiply mul 0 0 1 0 0 0 0 rD, rA, rB rD 6 rA rB 11 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA と rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 乗算器で は、64 ビ ッ ト の結果が出力 さ れます。 こ の値の下位ワ ー ド が rD に格納 さ れます。 上位ワ ー ド は破棄 さ れます。 擬似 コ ー ド (rD) ← LSW( (rA) × (rB) ) 変更 さ れる レ ジ ス タ • rD レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル メモ こ の命令は、 タ ーゲ ッ ト アーキテ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、 MicroBlaze でパ ラ メ ー タ C_USE_HW_MUL が 0 よ り 大 き い値に設定 さ れてい る場合にのみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 181 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mulh Multiply High mulh 0 0 1 0 0 0 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 21 0 0 0 0 0 0 0 0 1 31 説明 レ ジ ス タ rA と rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 の符号付 き 乗算では、 64 ビ ッ ト の結果が出力 さ れます。 こ の値の上位ワ ー ド は rD に格納 さ れ、 下位ワ ー ド は破棄 さ れます。 擬似 コ ー ド (rD) ← MSW( (rA) × (rB) ), signed 変更 さ れる レ ジ ス タ • rD レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル メモ こ の命令は、タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、MicroBlaze でパ ラ メ ー タ C_USE_HW_MUL が 2 に設定 さ れてい る場合にのみ使用可能です。 MULH を使用す る 場合は MUL 命令の 30 ビ ッ ト 目 と 31 ビ ッ ト 目を 0 に し 、2 つの命令が区別で き る よ う にす る 必要があ り ます。 MicroBlaze の以前のバージ ョ ンでは、 こ れ ら の ビ ッ ト は 0 に定義 さ れてい ま し たが、 実際の値は定義どお り ではあ り ませんで し た。 182 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 mulhu Multiply High Unsigned mulhu 0 0 1 0 0 0 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 21 0 0 0 0 0 0 1 1 31 説明 レ ジ ス タ rA と rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 の符号な し 乗算では、 符号な し 64 ビ ッ ト の結果が出力 さ れます。 こ の値の上位ワ ー ド は rD に格納 さ れ、 下 位ワ ー ド は破棄 さ れます。 擬似 コ ー ド (rD) ← MSW( (rA) × (rB) ), unsigned 変更 さ れる レ ジ ス タ • rD レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル メモ こ の命令は、タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、MicroBlaze でパ ラ メ ー タ C_USE_HW_MUL が 2 に設定 さ れてい る場合にのみ使用可能です。 MULHU を使用す る 場合は MUL 命令の 30 ビ ッ ト 目 と 31 ビ ッ ト 目を 0 に し 、2 つの命令が区別で き る よ う にす る 必要があ り ます。 MicroBlaze の以前のバージ ョ ンでは、 こ れ ら の ビ ッ ト は 0 に定義 さ れてい ま し たが、 実際の値は定義どお り ではあ り ませんで し た。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 183 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ mulhsu Multiply High Signed Unsigned mulhsu 0 0 1 0 0 0 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 21 0 0 0 0 0 1 0 31 説明 レ ジ ス タ rA お よ び rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 符号付き 32 ビ ッ ト X 符号な し 32 ビ ッ ト の乗算では、符号付 き 64 ビ ッ ト の結果が出 さ れます。 こ の値の最上位 ワ ー ド が rD に格納 さ れます。 最下位ワ ー ド は、 破棄 さ れます。 擬似 コ ー ド (rD) ← MSW( (rA), signed × (rB), unsigned ), signed 変更 さ れる レ ジ ス タ • rD レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル メモ こ の命令は、 タ ーゲ ッ ト アーキテ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ り 、 MicroBlaze のパ ラ メ ー タ C_USE_HW_MUL が 2 に設定 さ れてい る場合にのみ有効です。 MULHSU を使用す る 場合は MUL 命令の 30 ビ ッ ト 目 と 31 ビ ッ ト 目を 0 に し 、 2 つの命令が区別 で き る よ う にす る 必要があ り ます。 MicroBlaze の以前のバージ ョ ンでは、 こ れ ら の ビ ッ ト は 0 に 定義 さ れてい ま し たが、 実際の値は定義どお り ではあ り ませんで し た。 184 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 muli Multiply Immediate muli 0 0 1 1 0 0 0 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM の値を乗算 し 、 その結果を rD に格納 し ま す。 こ の 32 X 32 乗算器では、64 ビ ッ ト の結果が出力 さ れます。 こ の値の下位 ワー ド が rD に格納 さ れます。 上位ワ ー ド は破棄 さ れます。 擬似 コ ー ド (rD) ← LSW( (rA) × sext(IMM) ) 変更 さ れる レ ジ ス タ • rD レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 こ の命令は、 タ ーゲ ッ ト アーキテ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、 MicroBlaze でパ ラ メ ー タ C_USE_HW_MUL が 0 よ り 大 き い値に設定 さ れてい る場合にのみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 185 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ or Logical OR or 1 0 0 0 0 0 0 rD, rA, rB rD 6 rA 11 rB 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を OR 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ∨ (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル 186 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 ori Logical OR with Immediate ori 1 0 0 1 0 0 0 rD, rA, IMM rD 6 rA IMM 11 16 31 説明 レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を OR 演算 し 、その結果を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ∨ sext(IMM) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 187 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ pcmpbf Pattern Compare Byte Find pcmpbf 1 0 0 0 0 0 0 rD, rA, rB rD 6 バ イ ト 単位で比較 し 、 最初に一致 し た位置を返す rA 11 rB 16 1 0 0 0 21 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容をバ イ ト 単位で比較 し ます。 • rD には、 MSB を位置 1、 LSB を位置 4 と し て、最初に一致 し たバ イ ト の位置が格納 さ れます。 • 一致す る バ イ ト ペアがない場合は、 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 に設定 さ れてい る 場合にのみ使用可能です。 188 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 pcmpeq Pattern Compare Equal pcmpeq 1 0 0 0 0 1 0 rD, rA, rB rD 6 一致 し た場合に 1 を返す rA 11 rB 16 1 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を比較 し ます。 • 2 つの レ ジ ス タ の内容が一致 し た場合は rD に 1 が格納 さ れ、 一致 し ない場合は 0 が格納 さ れ ます。 擬似 コ ー ド if (rB) = (rA) then (rD) ← 1 else (rD) ← 0 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ こ の命令は、 パ ラ メ ー タ C_USE_PCMP_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 189 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ pcmpne Pattern Compare Not Equal pcmpne 1 0 0 0 0 1 1 rD, rA, rB rD 6 一致 し ない場合に 1 を返す rA 11 rB 16 1 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を比較 し ます。 • 2 つの レ ジ ス タ の内容が一致 し た場合は rD に 0 が格納 さ れ、 一致 し ない場合は 1 が格納 さ れ ます。 擬似 コ ー ド if (rB) = (rA) then (rD) ← 0 else (rD) ← 1 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ こ の命令は、 パ ラ メ ー タ C_USE_PCMP_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 190 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 put 0 Put to fsl interface 1 1 0 1 1 0 naput rA, FSLx FSL x にデー タ を書 き込み n : ノ ンブ ロ ッ キ ン グ a : 不可分 tnaput FSLx FSL x にデー タ を書 き 込み ( テ ス ト のみ) n : ノ ンブ ロ ッ キ ン グ a : 不可分 ncaput rA, FSLx FSL x に制御を書 き込み n : ノ ンブ ロ ッ キ ン グ a : 不可分 tncaput FSLx FSL x に制御を書 き 込み ( テ ス ト のみ) n : ノ ンブ ロ ッ キ ン グ a : 不可分 0 0 0 0 0 6 rA 11 1 n c t a 0 0 0 0 0 0 0 16 FSLx 28 31 説明 レ ジ ス タ rA の値を FSLx イ ン タ ーフ ェ イ ス に書 き 込みます。 put 命令には、 16 種類あ り ます。 ブ ロ ッ キ ン グの put 命令 (n ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ ス に書 き 込むスペース がで き る ま での間 MicroBlaze を ス ト ール し ます。ノ ンブ ロ ッ キ ン グの put 命令では MicroBlaze は ス ト ール さ れず、 スペース があ る場合はキ ャ リ ーが 0 に、 スペース がない場合は 1 に設定 さ れます。 すべてのデー タ put 命令 (c ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ スへの制御ビ ッ ト が 0 に、 すべ ての制御 put 命令 (c ビ ッ ト が 1) では 1 に設定 さ れます。 テ ス ト の put 命令 (t ビ ッ ト が 1) は、 FSL リ ン ク への書 き 込み信号がアサー ト さ れず、 ソ ース レ ジ ス タ が必要でない点を除 き、 通常どお り 処理 さ れます。 不可分の put 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ化 さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] ← 00111 else (FSLx) ← (rA) if (n = 1) then MSR[Carry] ← (FSLx Full bit) (FSLx Control bit) ← C 変更 さ れる レ ジ ス タ • MSR[Carry] • ESR[EC] (特権命令例外が発生 し た場合) MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 191 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル ブ ロ ッ キ ン グの put 命令では、命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール し ます。 割 り 込みは、 パ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れ、 命令が不可分 でない場合に実行 さ れます。 メモ アセ ンブ リ 言語で FSLx イ ン タ ーフ ェ イ ス を参照す る には、 rfsl0、 rfsl1、 ... rfsl15 を使用 し ます。 ブ ロ ッ キ ン グの put 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、 パ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合は、 こ の命令を遅延ス ロ ッ ト に含め る こ と がで き ません。 こ れ ら の命令は、 MicroBlaze でパ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れてい る 場 合にのみ使用可能です。 拡張命令 (不可分の put 命令) は、 MicroBlaze でパ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 192 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 putd 0 0 1 Put to fsl interface dynamic 0 0 1 1 0 naputd rA, rB FSL rB[28:31] にデー タ を書 き込み n : ノ ンブ ロ ッ キ ン グ a : 不可分 tnaputd rB FSL rB[28:31] にデー タ を書 き 込み ( テ ス ト のみ) n : ノ ンブ ロ ッ キ ン グ a : 不可分 ncaputd rA, rB FSL rB[28:31] に制御を書 き込み n : ノ ンブ ロ ッ キ ン グ a : 不可分 tncaputd rB FSL rB[28:31] に制御を書 き 込み ( テ ス ト のみ) n : ノ ンブ ロ ッ キ ン グ a : 不可分 0 0 0 6 0 rA rB 11 1 16 n 21 c t a 0 0 0 0 0 0 31 説明 レ ジ ス タ rA か ら 読み出 し た値を、rB の下位 4 ビ ッ ト で定義 さ れた FSL イ ン タ ーフ ェ イ ス に書 き 込 みます。 putd 命令には、 16 種類あ り ます。 ブ ロ ッ キ ン グの putd 命令 (n ビ ッ ト が 0) では、FSL イ ン タ ーフ ェ イ ス に書 き 込むスペース がで き る ま での間 MicroBlaze を ス ト ール し ます。 ノ ン ブ ロ ッ キ ン グの putd 命令では MicroBlaze は ス ト ー ル さ れず、 スペース があ る場合はキ ャ リ ーが 0 に、 スペース がない場合は 1 に設定 さ れます。 すべてのデー タ putd 命令 (c ビ ッ ト が 0) では、FSL イ ン タ ーフ ェ イ スへの制御ビ ッ ト が 0 に、すべ ての制御 putd 命令 (c ビ ッ ト が 1) では 1 に設定 さ れます。 テ ス ト の putd 命令 (t ビ ッ ト が 1) では、FSL リ ン ク への書 き 込み信号がアサー ト さ れず、 ソ ース レ ジ ス タ が必要でない点を除 き、 通常どお り 処理 さ れます。 不可分の putd 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ 化 さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。 MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。 擬似 コ ー ド if MSR[UM] = 1 then ESR[EC] ← 00111 else (FSL rB[28:31]) ← (rA) if (n = 1) then MSR[Carry] ← (FSL rB[28:31] Full bit) (FSL rB[28:31] Control bit) ← C MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 193 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 変更 さ れる レ ジ ス タ • MSR[Carry] • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル ブ ロ ッ キ ン グの putd 命令では、命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール し ます。 割 り 込みは、 命令が不可分 (割 り 込み不可) ではない場合に実行 さ れます。 メモ ブ ロ ッ キ ン グの putd 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、こ の命令を遅 延ス ロ ッ ト に含め る こ と がで き ません。 こ れ ら の命令は、 パ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れ、 パ ラ メ ー タ C_USE_ EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。 194 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 rsub 0 0 0 Arithmetic Reverse Subtract rsub rD, rA, rB 減算 rsubc rD, rA, rB キ ャ リ ー付 き 減算 rsubk rD, rA, rB 減算 ( キ ャ リ ーを保持) rsubkc rD, rA, rB キ ャ リ ー付 き 減算 ( キ ャ リ ーを保持) 0 K C 1 rD 6 rA 11 rB 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rB の内容か ら レ ジ ス タ rA の内容を減算 し 、その結果を レ ジ ス タ rD に格納 し ます。 rsubk に対 し ては、 命令のビ ッ ト 3 (図で K と 表記) が 1 に設定 さ れてい ます。 rsubc に対 し ては、 命令の ビ ッ ト 4 (図で C と 表記) が 1 に設定 さ れてい ます。 rsubkc に対 し ては、 両方の ビ ッ ト が 1 に設定 さ れてい ます。 ビ ッ ト 3 が 1 の場合 (rsubk、 rsubkc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値 が保持 さ れます。 ビ ッ ト 3 が 0 の場合 (rsub、 rsubc)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て変 更 さ れます。 ビ ッ ト 4 が 1 の場合 (rsubc、 rsubkc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影響 し ま す。 ビ ッ ト 4 が 0 の場合 (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 プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 195 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rsubi 0 0 0 1 Arithmetic Reverse Subtract Immediate rsubi rD, rA, IMM 即値減算 rsubic rD, rA, IMM キ ャ リ ー付 き即値減算 rsubik rD, rA, IMM 即値減算 ( キ ャ リ ーを保持) rsubikc rD, rA, IMM キ ャ リ ー付 き即値減算 ( キ ャ リ ーを保持) K C 1 rD 6 rA 11 IMM 16 31 説明 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値か ら レ ジ ス タ rA の内容を 減算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 rsubik に対 し ては、 命令の ビ ッ ト 3 (図で K と 表記) が 1 に設定 さ れてい ます。 rsubic に対 し ては、 命令の ビ ッ ト 4 (図で C と 表記) が 1 に設定 さ れてい ます。 rsubikc に対 し ては、 両方のビ ッ ト が 1 に設定 さ れてい ます。 ビ ッ ト 3 が 1 の場合 (rsubik、 rsubikc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値 が保持 さ れます。 ビ ッ ト 3 が 0 の場合 (rsubi、 rsubic)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て 変更 さ れます。 ビ ッ ト 4 が 1 の場合 (rsubic、 rsubikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の 実行に影響 し ます。 ビ ッ ト 4 が 0 の場合 (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 ビ ッ ト に符号拡張 し て、即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を参照 し て く だ さ い。 196 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 rtbd Return from Break rtbd 1 0 0 1 1 0 1 1 0 rA, IMM 0 1 6 0 rA 11 IMM 16 31 説明 ブ レー ク か ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加算 し て指定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令の後、 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 プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 197 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ rtid Return from Interrupt rn from Interrupt rtid 1 0 0 1 1 0 1 1 0 rA, IMM 0 6 0 1 rA 11 IMM 16 31 説明 割 り 込みか ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加算 し て指定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令の後、 割 り 込みが イ ネーブルにな り ます。 こ の命令では、常に遅延ス ロ ッ ト が使用 さ れます。 RTID に続 く 命令は、常に分岐 タ ーゲ ッ ト の前に 実行 さ れます。 こ の遅延ス ロ ッ ト 命令では、 割 り 込みがデ ィ ス エーブルに さ れます。 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[IE] ←1 MSR[UM] ←MSR[UMS] MSR[VM] ←MSR[VMS] 変更 さ れる レ ジ ス タ • PC • MSR[IE]、 MSR[UM]、 MSR[VM] • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 2 ク ロ ッ ク サイ クル メモ 通常は、 汎用レ ジ ス タ r14 を rA と し て使用 し ます。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 198 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 rted Return from Exception rted 1 0 0 1 1 0 1 1 0 rA, IMM 1 0 6 0 rA 11 IMM 16 31 説明 例外か ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加算 し て指 定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令の後、 例外が イ ネーブルにな り ます。 こ の命令では、 常に遅延ス ロ ッ ト が使用 さ れます。 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 ←0 変更 さ れる レ ジ ス タ • 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] が設定 さ れてい る 場合は、 遅延ス ロ ッ ト にあ る命令で例外が発生 し た場合に例 外が イ ネーブルの状態で例外ハン ド ラ の処理が開始す る ため、通常 こ の命令は使用で き ま せん。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 199 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ メ モ : 例外か ら 戻っ た ら 、MSR[DS] が設定 さ れてい る か をチ ェ ッ ク す る必要があ り ます。設定 さ れ ていれば、 BTR に格納 さ れてい る ア ド レ ス に戻 り ます。 200 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 rtsd Return from Subroutine rtsd 1 0 0 1 1 0 1 1 0 rA, IMM 0 0 6 0 rA IMM 11 16 31 説明 サブルーチンか ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加 算 し て指定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令では、 常に遅延ス ロ ッ ト が使用 さ れます。 RTSD に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前 に実行 さ れます。 擬似 コ ー ド PC ←(rA) + sext(IMM) allow following instruction to complete execution 変更 さ れる レ ジ ス タ • PC レ イテンシ 2 ク ロ ッ ク サイ クル メモ 通常は、 汎用レ ジ ス タ r15 を rA と し て使用 し ます。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 201 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sb Store Byte sb 1 0 1 0 1 0 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 21 0 0 31 説明 レ ジ ス タ rD の最下位バ イ ト の内容を、 レ ジ ス タ rA と rB の内容を加算 し た結果の メ モ リ ロ ケー シ ョ ンに格納 し ます。 デー タ 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] (デー タ 格納例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル 202 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 sbi Store Byte Immediate sbi 1 0 1 1 1 0 0 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rD の最下位バ イ ト の内容を、 レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値を加 算 し た結果の メ モ リ ロ ケーシ ョ ンに格納 し ます。 デー タ 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] (デー タ 格納例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 203 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sext16 Sign Extend Halfword sext16 1 0 0 0 1 0 0 rD, rA rD 6 rA 0 11 0 16 0 0 0 0 0 0 0 1 1 0 0 0 0 1 31 説明 ハーフ ワ ー ド (16 ビ ッ ト ) を ワー ド (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 ク ロ ッ ク サイ クル 204 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 sext8 Sign Extend Byte sext8 1 0 0 0 1 0 0 rD, rA rD 6 rA 0 11 0 16 0 0 0 0 0 0 0 1 1 0 0 0 0 0 31 説明 バ イ ト (8 ビ ッ ト ) を ワ ー ド (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 プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 205 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sh Store Halfword sh 1 0 1 0 1 0 1 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 0 21 0 31 説明 レ ジ ス タ rD の下位ハーフ ワ ー ド の内容を、レ ジ ス タ rA と rB の内容を加算 し た結果をハーフ ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止 さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で き ます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル 206 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 shi Store Halfword Immediate shi 1 0 1 1 1 0 1 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rD の下位ハーフ ワー ド の内容を、 レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値 を加算 し た結果をハーフ ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 仮想保護モー ド が イ ネーブルで、ア ク セ ス不可ま たは読 み出 し のみのゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で き ます。 不整列デー タ ア ク セ ス に よ る 例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 207 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ sra Shift Right Arithmetic sra 1 0 0 0 1 0 0 rD, rA rD 6 rA 0 11 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 1 31 説明 レ ジ ス タ rA の内容を 1 ビ ッ ト 右に算術シ フ ト し 、 その結果を rD に格納 し ます。 rA の MSB (符号 ビ ッ ト ) は、 rD の MSB に配置 さ れます。 シ フ ト チ ェーンか ら 外れた最下位ビ ッ ト は、 キ ャ リ ー フ ラ グに配置 さ れます。 擬似 コ ー ド (rD)[0] ← (rA)[0] (rD)[1:31] ←(rA)[0:30] MSR[C] ←(rA)[31] 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ 1 ク ロ ッ ク サイ クル 208 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 src Shift Right with Carry src 1 0 0 0 1 0 0 rD, rA rD 6 rA 0 11 0 16 0 0 0 0 0 0 0 0 1 0 0 0 0 1 31 説明 レ ジ ス タ rA の内容を 1 ビ ッ ト 右にシ フ ト し 、その結果を rD に格納 し ます。 キ ャ リ ー フ ラ グ も シ フ ト チ ェ ーンにシ フ ト さ れ、 rD の MSB に配置 さ れます。 シ フ ト チ ェ ーンか ら 外れた最下位ビ ッ ト は、 キ ャ リ ー フ ラ グに配置 さ れます。 擬似 コ ー ド (rD)[0] ← MSR[C] (rD)[1:31] ←(rA)[0:30] MSR[C] ←(rA)[31] 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ 1 ク ロ ッ ク サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 209 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ srl Shift Right Logical srl 1 0 0 0 1 0 0 rD, rA rD 6 rA 0 11 0 16 0 0 0 0 0 0 0 1 0 0 0 0 0 1 31 説明 レ ジ ス タ rA の内容を 1 ビ ッ ト 右に論理シ フ ト し 、その結果を rD に格納 し ます。0 がシ フ ト チ ェ ー ンにシ フ ト さ れ、rD の MSB に配置 さ れます。シ フ ト チ ェーンか ら 外れた最下位ビ ッ ト は、キ ャ リ ー フ ラ グに配置 さ れます。 擬似 コ ー ド (rD)[0] ← 0 (rD)[1:31] ←(rA)[0:30] MSR[C] ←(rA)[31] 変更 さ れる レ ジ ス タ • rD • MSR[C] レ イテンシ 1 ク ロ ッ ク サイ クル 210 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 sw Store Word sw 1 0 1 0 1 1 0 rD, rA, rB rD 6 rA 11 rB 16 0 0 0 0 0 0 0 0 0 0 21 0 31 説明 レ ジ ス タ rD の内容を、 レ ジ ス タ rA と rB の内容を加算 し た結果を ワー ド で揃え た メ モ リ ロ ケー シ ョ ンに格納 し ます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止 さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で き ます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 211 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ swi Store Word Immediate swi 1 0 1 1 1 1 0 rD, rA, IMM rD 6 rA 11 IMM 16 31 説明 レ ジ ス タ rD の内容を、レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値を加算 し た結果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止 さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で き ます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。 擬似 コ ー ド 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] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 212 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 213 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ swx Store Word Exclusive swx 1 1 0 1 1 0 0 rD, rA, rB rD 6 rA 11 rB 16 1 0 0 0 0 0 0 0 0 0 0 21 31 説明 予約ビ ッ ト がセ ッ ト さ れてい る場合、 レ ジ ス タ rD の内容を レ ジ ス タ rA と rB の内容を加算 し た結 果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンに条件付で格納 し ます。格納 さ れ る場合はキ ャ リ ー ビ ッ ト (MSR[C]) がセ ッ ト さ れ、 格納 さ れない場合は ク リ アにな り ます。 予約ビ ッ ト は ク リ アにな り ます。 デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ が TLB で検出 さ れない場合に発生 し ます。 仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止 さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で き ます。 不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 であ っ て も 発生 し ません。 擬似 コ ー ド 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 Mem(Addr) ←(rD)[0:31]; Reservation ←0; MSR[C] ←0 変更 さ れる レ ジ ス タ • MSR[C] (例外が発生 し ない場合) • MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発 生 し た場合) • ESR[EC]、 ESR[S] (例外が発生 し た場合) • ESR[DIZ] (デー タ 格納例外が発生 し た場合) レ イテンシ C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル 214 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 メモ こ の命令は LDX と 共に使用 し て、 セマ フ ォやス ピ ン ロ ッ ク な ど排他的ア ク セ ス を イ ンプ リ メ ン ト す る ために使用 し ます。 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 215 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ wdc Write to Data Cache wdc rA,rB wdc.flush rA,rB wdc.clear rA,rB 1 0 0 1 0 0 0 0 0 0 0 0 6 rA 1 1 rB 0 0 0 0 1 1 F 0 1 T 0 1 6 2 7 3 1 タ グに書 き込み、 キ ャ ッ シ ュ ラ イ ン を無効に、 ま たはフ ラ ッ シ ュ し ます。 説明 デー タ キャ ッシュ wdc.flush は F ビ ッ ト のセ ッ ト 、 wdc.clear は T ビ ッ ト のセ ッ ト に使用 し ます。 C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る場合、 F ビ ッ ト がセ ッ ト さ れていれば、 キ ャ ッ シ ュ ラ イ ンが フ ラ ッ シ ュ さ れ無効にな り ます。 それ以外の場合は、 キ ャ ッ シ ュ ラ イ ンが無効 にな り 、 メ モ リ に書 き 込まれていないデー タ が破棄 さ れます。 T ビ ッ ト がセ ッ ト さ れていれば、ア ド レ ス が一致す る キ ャ ッ シ ュ ラ イ ンのみが無効にな り ます。 rB が追加 さ れた レ ジ ス タ rA は、 影響を 受けた キ ャ ッ シ ュ ラ イ ンのア ド レ ス です。 C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れてい る 場合、 キ ャ ッ シ ュ ラ イ ンは常に無効に な り ます。 レ ジ ス タ rA には影響を受けた キ ャ ッ シ ュ ラ イ ンのア ド レ ス が含まれ、 rB の値は使用 さ れません。 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 C_DCACHE_LINE_LEN = 4 then cacheline ←(DCache Line)[(Ra) >> 4] ←address &0xfffffff0 address if C_DCACHE_LINE_LEN = 8 then cacheline ←(DCache Line)[(Ra) >> 5] ←address &0xffffffe0 address if F = 1 and cacheline.Dirty then for i = 0 .. C_DCACHE_LINE_LEN - 1 loop if cacheline.Valid[i] then Mem(address + i * 4) ←cacheline.Data[i] if T = 0 then cacheline.Tag ← 0 else if cacheline.Address = address then cacheline.Tag ← 0 216 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 変更 さ れる レ ジ ス タ • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ wdc お よ び wdc.clear の場合 2 ク ロ ッ ク サ イ ク ル wdc.flush の場合 2 + N ク ロ ッ ク サ イ ク ル (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 MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 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 japan.xilinx.com 217 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ wic Write to Instruction Cache wic 1 0 0 0 1 0 0 0 0 rA,rB 0 6 0 0 rA rB 11 0 0 0 0 16 1 1 0 1 0 0 0 31 説明 命令キ ャ ッ シ ュ タ グに書 き込み、キ ャ ッ シ ュ ラ イ ン を無効に し ます。 レ ジ ス タ 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 (ICache Line)[(Ra) if C_ICACHE_LINE_LEN (ICache Line)[(Ra) = 4 then >> 4].Tag ← 0 = 8 then >> 5].Tag ← 0 変更 さ れる レ ジ ス タ • ESR[EC] (特権命令例外が発生 し た場合) レ イテンシ 2 ク ロ ッ ク サイ クル メモ IC 命令は、命令キ ャ ッ シ ュ イ ネーブル (MSR[ICE]) か ら は独立 し ていて、命令キ ャ ッ シ ュ が イ ネー ブルであ っ て も 、 デ ィ ス エーブルであ っ て も 使用す る こ と がで き ます。 影響を受け る キ ャ ッ シ ュ ラ イ ンのア ド レ ス は、パ ラ メ ー タ C_USE_MMU や MMU が仮想モー ド ま たは実モー ド であ る かに関係 し てお ら ず、 常に物理ア ド レ ス (MSR[ICE]) です。 218 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) 命令 xor Logical Exclusive OR xor 1 0 0 0 0 1 0 rD, rA, rB rD 6 rA 11 rB 16 0 21 0 0 0 0 0 0 0 0 0 0 31 説明 レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を XOR 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ⊕ (rB) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3) japan.xilinx.com 219 第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ xori Logical Exclusive OR with Immediate xori 1 0 0 1 0 1 0 rD, rA, IMM rD 6 rA IMM 11 16 31 説明 IMM フ ィ ール ド の左側に 0 を 16 ビ ッ ト 分追加 し て 32 ビ ッ ト に拡張 し 、 拡張 さ れた IMM の内容 と レ ジ ス タ rA の内容を XOR 演算 し て、 その結果を レ ジ ス タ rD に格納 し ます。 擬似 コ ー ド (rD) ← (rA) ⊕ sext(IMM) 変更 さ れる レ ジ ス タ • rD レ イテンシ 1 ク ロ ッ ク サイ クル メモ デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を 参照 し て く だ さ い。 220 japan.xilinx.com MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド UG081 (v10.3)
© Copyright 2024 Paperzz