MicroBlaze Processer Reference Guide

MicroBlaze
プロセ ッサ
リ フ ァ レンス
ガイ ド
エ ンべデ ッ ド 開発キ ッ ト
(EDK)
EDK (v6.2) 2003 年 12 月 9 日
R
R
「Xilinx」 お よ びザ イ リ ン ク ス の ロ ゴ は米国 Xilinx Inc. の米国におけ る 登録商標です。 本書に明示的に付与 さ れていない権利 も すべて留保 し
ます。
CoolRunner、 RocketChips、 RocketIP、 Spartan、 StateBENCH、 StateCAD、 Virtex、 XACT、 XC2064、 XC3090、 XC4005、 お よ び XC5210
は、 Xilinx, Inc. (以下ザ イ リ ン ク ス 社) の登録商標です。
上記のザ イ リ ン ク ス の ロ ゴはザ イ リ ン ク ス社の商標です。
ACE Controller、ACE Flash、A.K.A. Speed、Alliance Series、AllianceCORE、Bencher、ChipScope、Configurable Logic Cell、CORE Generator、
CoreLINX、 Dual Block、 EZTag、 Fast CLK、 Fast CONNECT、 Fast FLASH、 FastMap、 Fast Zero Power、 Foundation、 Gigabit Speeds...and
Beyond!、HardWire、HDL Bencher、IRL、 J Drive、JBits、LCA、LogiBLOX、Logic Cell、LogiCORE、LogicProfessor、MicroBlaze、MicroVia、
MultiLINX、NanoBlaze、PicoBlaze、PLUSASM、PowerGuide、PowerMaze、QPro、Real-PCI、Rocket I/O、SelectI/O、SelectRAM、SelectRAM+、
Silicon Xpresso、 Smartguide、 Smart-IP、 SmartSearch、 SMARTswitch、 System ACE、 Testbench In A Minute、 TrueMap、 UIM、 VectorMaze、
VersaBlock、 VersaRing、 Virtex-II Pro、 Wave Table、 WebFITTER、 WebPACK、 WebPOWERED、 XABEL、 XACT-Floorplanner、 XACTPerformance、 XACTstep Advanced、 XACTstep Foundry、 XAM、 XAPP、 X-BLOX +、 XC の接頭辞が付いたすべての製品名称、 XChecker、
XDM、 XEPLD、 Xilinx Foundation Series、 Xilinx XDTV、 Xinfo、 XSI、 XtremeDSP、 お よ び ZERO+ はザ イ リ ン ク ス 社の商標です。
The Programmable Logic Company はザ イ リ ン ク ス 社のサービ ス マー ク です。
その他すべての商標はそれぞれのオーナーが所有 し てい ま す。
ザ イ リ ン ク ス 社は、 本書に記載 さ れた製品の応用や使用に起因す る 責任を一切負い ません。 特許権、 著作権、 マ ス ク ワ ー ク 権な ど の権利で保
護 さ れた ラ イ セ ン ス の譲渡 も 行い ま せん。 ザ イ リ ン ク ス 社は信頼性、 機能、 デザ イ ン を向上 し 、 最高の製品を供給す る ため、 随時変更す る 権
利を保有 し ます。 ザ イ リ ン ク ス 社は製品に内蔵 さ れた回路以外の回路の使用に関 し ては責任を負い ません。 本書に表示 ま たは説明 さ れてい る
デザ イ ン、 コ ー ド ま たは情報は、 「現状の ま ま 」 提供 さ れてい ま す。 デザ イ ン、 コ ー ド 、 ま たは情報は機能、 アプ リ ケーシ ョ ン、 ま たは標準の
1 つの可能な イ ン プ リ メ ン テーシ ョ ン と し て提供 さ れてお り 、 ザ イ リ ン ク ス 社はその よ う な イ ン プ リ メ ン テーシ ョ ン が第三者の権利を侵害 し
ない こ と を保証 し ません。 イ ン プ リ メ ン テーシ ョ ン に必要ないか な る 権利の取得 も ユーザーの責任 と な り ます。 ザ イ リ ン ク ス 社はそれ ら の イ
ン プ リ メ ン テーシ ョ ン の妥当性について、 イ ン プ リ メ ン テーシ ョ ン が第三者の権利を侵害 し ない こ と 、 商品化ま たは特定の目的に適 し てい る
こ と な ど を含め、 明示黙示を問わず一切保証いた し ま せん。 ザ イ リ ン ク ス 社のデバ イ ス お よ び製品は、 米国特許、 米国お よ び外国において出
願中の特許に よ り 保護 さ れてい ま す。 ザ イ リ ン ク ス 社は、 こ のヘルプに記載 さ れたデバ イ ス ま たは記述 さ れた製品が特許や第三者の権利を侵
害 し ない こ と を保証 し ま せん。 ま た、 本書の誤 り を修正 し た り 、 ユーザーにその よ う な修正を勧めた り す る 義務はあ り ま せん。 ザ イ リ ン ク ス
社はエ ン ジニ ア リ ン グ、 ソ フ ト ウ ェ ア サポー ト 、 な ら びにユーザーに提供 さ れ る ヘルプの正確性や妥当性に対す る 責任は負い ま せん。
ザ イ リ ン ク ス 製品は生命維持のための装置やシ ス テ ム用ではあ り ません。 該当す る ザ イ リ ン ク ス幹部の書面に よ る 事前の許可な く ザ イ リ ン ク
ス製品を その よ う な目的で使用す る こ と は禁 じ ら れてい ま す。
本書に記載 さ れ て い る 内容はザ イ リ ン ク ス 社が所有 し てお り 、 著作権で保護 さ れ て い ま す。 © Copyright 1994-2004 Xilinx, Inc. All Rights
Reserved. 本書に明記 さ れてい る 場合を除 き 、 こ の文書のいかな る 部分 も 、 ザ イ リ ン ク ス 社の書面に よ る 事前の許可な し に、 電子的、 機械的、
複写、 録音を含め、 いかな る 形態 ま たは手段に よ っ て も 、 コ ピー、 複製、 配布、 再発行、 ダ ウ ン ロ ー ド 、 表示、 掲載、 ま たは転送す る こ と は
で き ま せん。 こ の文書に含 ま れ る 資料を許可な く 使用す る こ と は、 著作権法、 商標法、 秘密保護 と 公示の法律、 通信規定 と 法規の違反 と な る
可能性があ り ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
www.xilinx.co.jp
EDK (v6.2) 2003 年 12 月 9 日
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
次の表に、 こ の文書の改訂履歴を示 し ます。
日付
08/07/00
バージ ョ ン情報
1.0
EDK (v6.2) 2003 年 12 月 9 日
改訂内容
エンべデ ッ ド 開発キ ッ ト (EDK) の初 リ リ ース
www.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
www.xilinx.co.jp
EDK (v6.2) 2003 年 12 月 9 日
目次
こ のマニ ュ アルについて
マニ ュ アルの内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
その他の リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
表記規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
書体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
オン ラ イ ン マニ ュ アル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
第 1 章 : MicroBlaze アーキテ ク チ ャ
サマ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
汎用レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
特殊用途レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
パ イ プ ラ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
パ イ プ ラ イ ン アーキテ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
分岐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
読み出 し /格納アーキテ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
割 り 込み、 例外、 ブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
割 り 込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
ブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
命令キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
キ ャ ッ シ ュ の構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
キ ャ ッ シ ュ の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
ソ フ ト ウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LMB メ モ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
デー タ キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
キ ャ ッ シ ュ の構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
キ ャ ッ シ ュ の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ソ フ ト ウェア . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LMB メ モ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FSL 読み出 し 命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FSL 書 き 込み命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
デバ ッ グ イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
デバ ッ グの特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
25
26
26
26
26
27
28
28
29
29
30
31
31
5
R
目次
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
サマ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
バ ス コ ン フ ィ ギ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
典型的なペ リ フ ェ ラ ル配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
ビ ッ ト お よびバ イ ト の表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
コ ア I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
バ ス の構成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
OPB バス コ ン フ ィ ギ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LMB ( ローカル メ モ リ バス ) の定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LMB ( ローカル メ モ リ バス ) の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
デー タ の読み出 し お よ び書 き 込み操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FSL (高速シ ンプ レ ッ ク ス リ ン ク ) バ ス の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
デバ ッ グ イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
イ ンプ リ メ ン テーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
パ ラ メ ー タ の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
48
50
52
53
55
56
56
第 3 章 : MicroBlaze エ ンデ ィ ア ン
定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
ビ ッ ト の命名規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
デー タ タ イ プお よ びエンデ ィ ア ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
VHDL の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
BRAM - LMB の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
BRAM - OPB の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
サマ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
デー タ タ イ プ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
レ ジ ス タ の使用規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
ス タ ッ ク の規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
呼び出 し 規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
メ モ リ モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
ス モール デー タ領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
デー タ 領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
共有の未初期化領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
リ テ ラ ルま たは定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
割 り 込みお よび例外処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
サマ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
表記法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
フ ォーマ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
このマニ ュ アルについて
こ の マ ニ ュ ア ル で は、 エ ン べデ ッ ド 開発 キ ッ ト に 含 ま れ る 32 ビ ッ ト ソ フ ト プ ロ セ ッ サ の
MicroBlaze につい て説明 し ま す。 こ の マ ニ ュ アルは、 MicroBlaze のハー ド ウ ェ アお よ び ソ フ ト
ウ ェ ア アーキテ ク チ ャ について記述 さ れてい ます。
マニ ュ アルの内容
こ のマニ ュ アルでは、 MicroBlaze ソ フ ト ウ ェ ア プ ロ セ ッ サ特有の次の ト ピ ッ ク について説明 し
ます。
•
コ アのアーキ テ ク チ ャ
•
バ ス イ ン ターフ ェ イ スお よびエンデ ィ ア ン
•
アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス
•
命令セ ッ ト アーキテ ク チ ャ
その他の リ ソ ース
その他の情報については、 http://www.xilinx.co.jp/support を参照 し て く だ さ い。 次の表に、 web サ
イ ト か ら ア ク セ ス可能な リ ソ ー ス の一覧を示 し ま す。 こ の リ ソ ース には、 表示 さ れてい る URL か
ら も 直接ア ク セ ス で き ます。
リ ソ ース
チ ュ ー ト リ アル
説明/URL
デザ イ ン入力か ら 検証やデバ ッ グ ま でのザ イ リ ン ク ス のデザ イ ン フ
ロ ーに ついて説明 し たチ ュ ー ト リ アルです。
http://www.xilinx.co.jp/support/techsup/tutorials/index.htm
ア ンサー ブ ラ ウ ザ
ザ イ リ ン ク ス の ソ リ ュ ーシ ョ ン レ コ ー ド のデー タ ベース です。
http://www.xilinx.co.jp/xlnx/xil_ans_browser.jsp
アプ リ ケーシ ョ ン
ノー ト
デバ イ ス別デザ イ ン技術お よ びアプ ロ ーチの説明です。
デー タ シー ト
リ ー ド バ ッ ク 、 バ ウ ン ダ リ ス キ ャ ン、 コ ン フ ィ ギ ュ レーシ ョ ン、 レ ン
グ ス カ ウ ン ト 、 デバ ッ グ な ど、 ザ イ リ ン ク ス デバ イ ス の特性に関す る
情報がデバ イ ス別に記載 さ れてい ます。
http://www.xilinx.co.jp/support/apps/appsweb.htm
http://www.xilinx.co.jp/xlnx/xweb/xil_publications_index.jsp
プ ロ ブ レ ム ソ ルバー
デザ イ ンの問題を ト ラ ブルシ ュ ー ト で き る 対話型ツール
です。
http://www.xilinx.co.jp/support/troubleshoot/psolvers.htm
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
7
R
このマニ ュ アルについて
リ ソ ース
テ ク ニ カル ヒ ン ト
説明/URL
ザ イ リ ン ク ス デザ イ ン環境についての最新ニ ュ ース、 デザ イ ンの ヒ ン
ト 、 パ ッ チ情報です。
http://support.xilinx.co.jp/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 表記に も 使
用し ま す。
中かっ こ { }
縦棒 |
1 つ以上の項目を選択す る ための
リ ス ト を示 し ます。
選択す る リ ス ト の 項目 を 分離 し
ます。
縦の省略記号
.
.
.
横の省略記号 . . .
8
繰 り 返 し 項目が省略 さ れ て い る
こ と を示 し ます。
繰 り 返 し 項目が省略 さ れ て い る
こ と を示 し ます。
www.xilinx.co.jp
ngdbuild [option_name]
design_name
[File] → [Open] を ク リ ッ ク し
ます。
lowpwr ={on|off}
lowpwr ={on|off}
IOB #1: Name = QOUT’
IOB #2: Name = CLKIN’
.
.
.
allow block block_name loc1
loc2 ... locn;
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
表記規則
オ ン ラ イ ン マニ ュ アル
こ のマニ ュ アルでは、 次の規則が使用 さ れてい ます。
表記規則
使用箇所
青色の文字
マ ニ ュ アル内の相互参照 を示 し
ます。
赤色の文字
ほかのマ ニ ュ アルへの相互参照
を示 し ます。
青色の下線付 き 文字
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
Web サ イ ト (URL) への
ハ イ パー リ ン ク です。
www.xilinx.co.jp
例
詳細については、「その他の リ ソ ー
ス」 を参照 し て く だ さ い。
詳細については、 第 1 章の 「 タ イ
ト ル フ ォーマ ッ ト 」 を参照 し て く
だ さ い。
詳細については、 『Virtex-II
Platform FPGA ユーザー ガ イ ド 』
の図 2-5 を参照 し て く だ さ い。
最新の ス ピー ド フ ァ イ ルは、
http://www.xilinx.co.jp か ら 入手
で き ます。
9
R
10
このマニ ュ アルについて
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
第1章
MicroBlaze アーキテ ク チ ャ
サマ リ
こ の章では、 MicroBlaze 32 ビ ッ ト ソ フ ト プ ロ セ ッ サ コ アのアーキテ ク チ ャ について説明 し ます。
概要
MicroBlaze エンべデ ッ ド ソ フ ト コ アは、ザ イ リ ン ク ス FPGA での イ ンプ リ メ ン テーシ ョ ン向けに
最適化 さ れた RISC (Reduced Instruction Set Computer) です。 図 1-1 に MicroBlaze コ アのブ ロ ッ
ク 図を示 し ます。
機能
MicroBlaze エンべデ ッ ド ソ フ ト コ アには、 次の機能が含まれてい ます。
•
32 個の 32 ビ ッ ト 汎用レ ジ ス タ
•
3 個のオペ ラ ン ド お よ び 2 個のア ド レ ス指定モー ド のあ る 32 ビ ッ ト 命令ワ ー ド
•
IBM の OPB ( オンチ ッ プ ペ リ フ ェ ラ ル バ ス ) 仕様に準拠す る 32 ビ ッ ト の命令バ スお よ び
デー タ バ ス
•
命令バ スお よ びデー タ バ ス はそれぞれ LMB ( ロ ーカル メ モ リ チ ッ プ) を介 し てオンチ ッ プ ブ
ロ ッ ク RAM へ直接接続
•
32 ビ ッ ト ア ド レ ス バ ス
•
単一パ イ プ ラ イ ン
•
命令お よ びデー タ のキ ャ ッ シ ュ
•
ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク
•
FSL (高速シ ンプ レ ッ ク ス リ ン ク ) のサポー ト
•
ハー ド ウ ェ ア乗算器 (Virtex-II お よ び順デバ イ ス )
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
11
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
命令側
バス イ ン タ ー フ ェ イ ス
デー タ 側
バス イ ン タ ー フ ェ イ ス
加算 / 減算
ILMB
プ ログ ラ ム
カ ウン タ
DLMB
シ フ ト / 論理
乗算
バス
IF
バス
IF
命令
デコー ド
MFSL0..7
SFSL0..7
レ ジ ス タ フ ァ イル
命令
バッ フ ァ
32X32b
DOPB
IOPB
図 1-1 : MicroBlaze コ アのブ ロ ッ ク 図
命令
MicroBlaze の命令は、 すべて 32 ビ ッ ト で、 タ イ プ A と タ イ プ B のいずれか と し て定義 さ れます。
タ イ プ A の命令には、最大 2 個の ソ ース レ ジ ス タ オペ ラ ン ド と 1 個のデス テ ィ ネーシ ョ ン レ ジ ス
タ オペ ラ ン ド を含む こ と がで き ます。 タ イ プ B の命令には、 1 個の ソ ース レ ジ ス タ と 16 ビ ッ ト の
即値オペ ラ ン ド が含まれます。 こ の 16 ビ ッ ト の即値オペ ラ ン ド は、 タ イ プ B 命令に IMM 命令を
付け る と 、 32 ビ ッ ト ま で拡張可能です。 タ イ プ B の命令には、 1 個のデ ス テ ィ ネーシ ョ ン レ ジ ス
タ オペ ラ ン ド が含まれます。 命令の フ ァ ン ク シ ョ ンは、 演数、 論理、 分岐、 読み出 し /格納、 特殊、
の い ずれ か に 分類 さ れ ま す。 表 1-2 に MicroBlaze の 命令 セ ッ ト を 示 し ま す。 詳細は、 第 5 章
「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。 表 1-1 で、 各命令のセマン テ ィ ク
ス で使用 さ れ る 命令セ ッ ト の用語を説明 し ます。
表 1-1 : 命令セ ッ ト の用語
シ ンボル
説明
Ra
R0 ~ R31、 汎用レ ジ ス タ 、 ソ ース オペ ラ ン ド a
Rb
R0 ~ R31、 汎用レ ジ ス タ 、 ソ ース オペ ラ ン ド b
Rd
R0 ~ R31、 汎用レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド
C
キ ャ リ ー フ ラ グ、 MSR[29]
Sa
特殊用途レ ジ ス タ 、 ソ ース オペ ラ ン ド
Sd
特殊用途レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド
s(x)
符号拡張引数 x (最大 32 ビ ッ ト )
*Addr
ロ ケーシ ョ ン Addr にあ る メ モ リ 内容 (デー タ サ イ ズ揃え )
12
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
表 1-2 : MicroBlaze の命令セ ッ ト サマ リ
タ イプ A
0-5
6-10
11-15 16-20
タ イプ B
0-5
6-10
11-15
ADD Rd,Ra,Rb
000000
Rd
Ra
Rb
00000000000
Rd := Rb + Ra
RSUB Rd,Ra,Rb
000001
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + 1
ADDC Rd,Ra,Rb
000010
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + C
RSUBC Rd,Ra,Rb
000011
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + C
ADDK Rd,Ra,Rb
000100
Rd
Ra
Rb
00000000000
Rd := Rb + Ra
RSUBK Rd,Ra,Rb
000101
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + 1
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 cmp Ra (signed)
CMPU Rd,Ra,Rb
000101
Rd
Ra
Rb
00000000011
Rd := Rb cmp Ra (unsigned)
ADDI Rd,Ra,Imm
001000
Rd
Ra
Imm
Rd := s(Imm) + Ra
RSUBI Rd,Ra,Imm
001001
Rd
Ra
Imm
Rd := s(Imm) + Ra + 1
ADDIC Rd,Ra,Imm
001010
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
RSUBIC Rd,Ra,Imm
001011
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
ADDIK Rd,Ra,Imm
001100
Rd
Ra
Imm
Rd := s(Imm) + Ra
RSUBIK Rd,Ra,Imm
001101
Rd
Ra
Imm
Rd := s(Imm) + Ra + 1
ADDIKC Rd,Ra,Imm
001110
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
RSUBIKC Rd,Ra,Imm
001111
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
MUL Rd,Ra,Rb
010000
Rd
Ra
Rb
00000000000
Rd := Ra * Rb
BSRL Rd,Ra,Rb
010001
Rd
Ra
Rb
00000000000
Rd : = Ra >> Rb
BSRA Rd,Ra,Rb
010001
Rd
Ra
Rb
01000000000
Rd := Ra[0], (Ra >> Rb)
BSLL Rd,Ra,Rb
010001
Rd
Ra
Rb
10000000000
Rd := Ra << Rb
MULI Rd,Ra,Imm
011000
Rd
Ra
Imm
Rd := Ra * s(Imm)
BSRLI Rd,Ra,Imm
011001
Rd
Ra
0000
0000.. Imm
Rd : = Ra >> Imm
BSRAI Rd,Ra,Imm
011001
Rd
Ra
0000
0100.. Imm
Rd := Ra[0], (Ra >> Imm)
BSLLI Rd,Ra,Imm
011001
Rd
Ra
0000
1000.. Imm
Rd := Ra << Imm
IDIV Rd,Ra,Rb
010010
Rd
Ra
Rb
00000000000
Rd := Rb/Ra, signed
IDIVU Rd,Ra,Rb
010010
Rd
Ra
Rb
00000000001
Rd := Rb/Ra, unsigned
GET Rd,FSLx
011011
Rd
00000
0000
FSLx
Rd := FSLx (blocking data read)
PUT Ra,FSLx
011011
00000
Ra
1000
FSLx
FSLx := Ra (blocking data write)
nGET Rd,FSLx
011011
Rd
00000
0100
FSLx
Rd := FSLx (non-blocking data read)
nPUT Ra,FSLx
011011
00000
Ra
1100
FSLx
FSLx := Ra (non-blocking data write)
cGET Rd,FSLx
011011
Rd
00000
0010
FSLx
Rd := FSLx (blocking control read)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
21-31
16-31
www.xilinx.co.jp
セマ ン テ ィ ク ス
13
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-2 : MicroBlaze の命令セ ッ ト サマ リ (続き )
タ イプ A
0-5
6-10
11-15 16-20
21-31
タ イプ B
0-5
6-10
11-15
cPUT Ra,FSLx
011011
00000
Ra
1010
FSLx
FSLx := Ra (blocking control write)
ncGET Rd,FSLx
011011
Rd
00000
0110
FSLx
Rd := FSLx (non-blocking control read)
ncPUT Ra,FSLx
011011
00000
Ra
1110
FSLx
FSLx := Ra (non-blocking control write)
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
SRA Rd,Ra
100100
Rd
Ra
0000000000000001
Rd := Ra[0], (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[0:23] := Ra[24];
セマ ン テ ィ ク ス
16-31
Rd[24:31] := Ra[24:31]
SEXT16 Rd,Ra
100100
Rd
Ra
0000000001100001
Rd[0:15] := Ra[16];
Rd[16:31] := Ra[16:31]
WIC Ra,Rb
100100
Ra
Ra
Rb
01101000
ICache_Tag := Ra, ICache_Data := Rb
WDC Ra,Rb
100100
Ra
Ra
Rb
01100100
DCache_Tag := Ra, DCache_Data := Rb
MTS Sd,Ra
100101
00000
Ra
110000000000000d
Sd := Ra , where S1 is MSR
MFS Rd,Sa
100101
Rd
00000
100000000000000a
Rd := Sa , where S0 is PC and S1 is MSR
MSRCLR Rd,Imm
100101
Rd
00001
00
Imm14
Rd := MSR; MSR := MSR ^ Imm14
MSRSET Rd,Imm
100101
Rd
00000
00
Imm14
Rd := MSR; MSR := MSR ^ 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
if Ra = 0: PC := PC + Rb
BNE Ra,Rb
100111
00001
Ra
Rb
00000000000
if Ra /= 0: PC := PC + Rb
BLT Ra,Rb
100111
00010
Ra
Rb
00000000000
if Ra < 0: PC := PC + Rb
BLE Ra,Rb
100111
00011
Ra
Rb
00000000000
if Ra <= 0: PC := PC + Rb
BGT Ra,Rb
100111
00100
Ra
Rb
00000000000
if Ra > 0: PC := PC + Rb
BGE Ra,Rb
100111
00101
Ra
Rb
00000000000
if Ra >= 0: PC := PC + Rb
14
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
表 1-2 : MicroBlaze の命令セ ッ ト サマ リ (続き )
タ イプ A
0-5
6-10
11-15 16-20
タ イプ B
0-5
6-10
11-15
BEQD Ra,Rb
100111
10000
Ra
Rb
00000000000
if Ra = 0: PC := PC + Rb
BNED Ra,Rb
100111
10001
Ra
Rb
00000000000
if Ra /= 0: PC := PC + Rb
BLTD Ra,Rb
100111
10010
Ra
Rb
00000000000
if Ra < 0: PC := PC + Rb
BLED Ra,Rb
100111
10011
Ra
Rb
00000000000
if Ra <= 0: PC := PC + Rb
BGTD Ra,Rb
100111
10100
Ra
Rb
00000000000
if Ra > 0: PC := PC + Rb
BGED Ra,Rb
100111
10101
Ra
Rb
00000000000
if Ra >= 0: PC := PC + Rb
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
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
if Ra = 0: PC := PC + s(Imm)
BNEI Ra,Imm
101111
00001
Ra
Imm
if Ra /= 0: PC := PC + s(Imm)
BLTI Ra,Imm
101111
00010
Ra
Imm
if Ra < 0: PC := PC + s(Imm)
BLEI Ra,Imm
101111
00011
Ra
Imm
if Ra <= 0: PC := PC + s(Imm)
BGTI Ra,Imm
101111
00100
Ra
Imm
if Ra > 0: PC := PC + s(Imm)
BGEI Ra,Imm
101111
00101
Ra
Imm
if Ra >= 0: PC := PC + s(Imm)
BEQID Ra,Imm
101111
10000
Ra
Imm
if Ra = 0: PC := PC + s(Imm)
BNEID Ra,Imm
101111
10001
Ra
Imm
if Ra /= 0: PC := PC + s(Imm)
BLTID Ra,Imm
101111
10010
Ra
Imm
if Ra < 0: PC := PC + s(Imm)
BLEID Ra,Imm
101111
10011
Ra
Imm
if Ra <= 0: PC := PC + s(Imm)
BGTID Ra,Imm
101111
10100
Ra
Imm
if Ra > 0: PC := PC + s(Imm)
BGEID Ra,Imm
101111
10101
Ra
Imm
if Ra >= 0: PC := PC + s(Imm)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
21-31
16-31
www.xilinx.co.jp
セマ ン テ ィ ク ス
15
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-2 : MicroBlaze の命令セ ッ ト サマ リ (続き )
タ イプ A
0-5
6-10
11-15 16-20
タ イプ B
0-5
6-10
11-15
110000
Rd
Ra
LBU Rd,Ra,Rb
21-31
セマ ン テ ィ ク ス
16-31
Rb
00000000000
Addr := Ra + Rb;
Rd[0:23] := 0, Rd[24:31] := *Addr
LHU Rd,Ra,Rb
110001
Rd
Ra
Rb
00000000000
Addr := Ra + Rb;
Rd[0:15] := 0, Rd[16:31] := *Addr
LW Rd,Ra,Rb
110010
Rd
Ra
Rb
00000000000
Addr := Ra + Rb;
Rd := *Addr
SB Rd,Ra,Rb
110100
Rd
Ra
Rb
00000000000
Addr := Ra + Rb;
*Addr := Rd[24:31]
SH Rd,Ra,Rb
110101
Rd
Ra
Rb
00000000000
Addr := Ra + Rb;
*Addr := Rd[16:31]
SW Rd,Ra,Rb
110110
Rd
Ra
Rb
00000000000
Addr := Ra + Rb;
*Addr := Rd
LBUI Rd,Ra,Imm
111000
Rd
Ra
Imm
Addr := Ra + s(Imm);
Rd[0:23] := 0, Rd[24:31] := *Addr
LHUI Rd,Ra,Imm
111001
Rd
Ra
Imm
Addr := Ra + s(Imm);
Rd[0:15] := 0, Rd[16:31] := *Addr
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 := Rd[24:31]
SHI Rd,Ra,Imm
111101
Rd
Ra
Imm
Addr := Ra + s(Imm);
*Addr := Rd[16:31]
SWI Rd,Ra,Imm
111110
Rd
Ra
Imm
Addr := Ra + s(Imm);
*Addr := Rd
16
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
レ ジス タ
レジス タ
MicroBlaze は完全直交アーキ テ ク チ ャ です。 MicroBlaze には 32 個の 32 ビ ッ ト 汎用レ ジ ス タ と 2
個の 32 ビ ッ ト 特殊用途レ ジ ス タ が含まれます。
汎用レ ジ ス タ
32 ビ ッ ト 汎用レ ジ ス タ の数値は、 R0 ~ R31 です。 R0 は、 常に値 0 にな る よ う に定義 さ れてい ま
す。 R0 に別の値が書き 込まれて も 破棄 さ れ、 常に 0 が読み込まれます。
0
31
↑
R0 ~ R31
図 1-2 : R0 ~ R31
表 1-3 : 汎用レ ジ ス タ (R0 ~ R31)
ビッ ト
0:31
名前
R0 ~ R31
説明
リセッ ト値
0x00000000
汎用レ ジ ス タ
R0 ~ R31 は、 32 ビ ッ ト の汎用レ ジ ス タ
です。 R0 は、 常にゼ ロ です。
特殊用途レ ジ ス タ
プ ロ グ ラ ム カ ウ ン タ (PC)
プ ロ グ ラ ム カ ウ ン タ (PC) は、 次に フ ェ ッ チ さ れ る 命令ワ ー ド の 32 ビ ッ ト ア ド レ ス です。 こ れは、
RPC に MFS 命令を使用 し てア ク セ スす る こ と で読み出す こ と がで き ます。 ただ し 、MTS 命令を使
用 し て PC に書 き 込む こ と はで き ません。
0
31
↑
PC
図 1-3 : PC
表 1-4 : プ ログ ラム カ ウン タ (PC)
ビッ ト
0:31
名前
PC
説明
プログ ラ ム カウン タ
リセッ ト値
0x00000000
次に フ ェ ッ チ さ れ る 命令のア ド レ ス
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
17
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
マ シ ン ス テー タ ス レ ジ ス タ (MSR)
マ シ ン ス テー タ ス レ ジ ス タ (MSR) には、 キ ャ リ ー フ ラ グお よ び割 り 込み、 バ ス ロ ッ ク 、 キ ャ ッ
シ ュ 、 FSL エ ラ ーの イ ネーブルが含まれてい ます。 こ の レ ジ ス タ は、 RMSR に MFS 命令を使用 し
て ア ク セ ス す る こ と で読み出す こ と がで き ます。 MSR の読み出 し 時は、 ビ ッ ト 29 が キ ャ リ ー コ
ピー と し て ビ ッ ト 0 に複製 さ れます。 MTS 命令を使用す る と MSR に書 き 込む こ と がで き ます。 た
だ し 、 MSR への書き 込みは、 1 ク ロ ッ ク サ イ ク ル遅れます。 MTS を使用 し て MSR に書 き 込む と 、
MTS 命令を実行 し てか ら 1 ク ロ ッ ク サ イ ク ル後にその値が反映 さ れます。 ビ ッ ト 0 に書 き 込ま れ
た値は、 いずれ も 破棄 さ れます。
0
24 25 26 27 28 29 30 31
↑
↑
CC
RESERVED
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
DCE DZ ICE FSL BIP C
IE BE
図 1-4 : MSR
表 1-5 : マシ ン ス テー タ ス レ ジ ス タ (MSR)
ビッ ト
0
名前
CC
説明
リセッ ト値
Arithmetic Carry Copy
0
演算キ ャ リ ー ( ビ ッ ト 29) の コ ピー 読み出 し のみ
1:23
予約済み
24
DCE
Data Cache Enable
0
0 : デー タ キ ャ ッ シ ュ がデ ィ ス エーブル
1 : デー タ キ ャ ッ シ ュ が イ ネーブル
25
DZ
Dvision by Zero
0
0 : 0 での除算な し
1 : 0 での除算あ り
26
ICE
Instruction Cache Enable
0
0 : 命令キ ャ ッ シ ュ がデ ィ ス エーブル
1 : 命令キ ャ ッ シ ュ が イ ネーブル
27
FSL
FSL Error
0
0 : FSL の get/put でエ ラ ーな し
1 : FSL の get/put で命令 タ イ プ と 値 タ イ プに不一
致あ り
28
BIP
Break in Progress
0
0 : 実行中のブ レー ク な し
1 : ブ レー ク 実行中
ブ レー ク の ソ ースは ソ フ ト ウ ェ アのブ レー ク 命令
ま たは Ext_Brk ま たは Ext_NM_Brk ピ ンか ら の
ハー ド ウ ェ ア ブ レー ク のいずれかです。
18
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
パイ プ ラ イ ン
表 1-5 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き )
ビッ ト
29
名前
C
説明
リセッ ト値
Arithmetic Carry
0
0 : キ ャ リ ーな し ( ボ ロ ー )
1 キ ャ リ ー ( ボ ロ ーな し )
30
IE
0
Interrupt Enable
0 : 割 り 込みデ ィ ス エーブル
1 : 割 り 込み イ ネーブル
31
BE
0
Buslock Enable
0 : デー タ 側 OPB でのバ ス ロ ッ ク デ ィ ス エーブル
1 : デー タ 側 OPB でのバス ロ ッ ク イ ネーブル
バ ス ロ ッ ク イ ネーブルは、 ILMB、 DLMB、
ま たは IOPB の動作に影響 し ません。
パイ プ ラ イ ン
こ のセ ク シ ョ ンでは、 MicroBlaze パ イ プ ラ イ ン アーキ テ ク チ ャ について説明 し ます。
パイ プ ラ イ ン アーキテ ク チ ャ
MicroBlaze パ イ プ ラ イ ンは、 並列パ イ プ ラ イ ンで、 次の 3 つの ス テージがあ り ます。
•
フェ ッチ
•
デコー ド
•
実行
通常、 各ス テージ を完了す る のに 1 ク ロ ッ ク サ イ ク ルかか り ます。 つま り 、 遅延や中断な ど を除い
て命令が完了す る のに 3 ク ロ ッ ク サ イ ク ルかか り ます。
サイ クル 1
サイ クル 2
サイ クル 3
フェ ッチ
デコー ド
実行
MicroBlaze の並列パ イ プ ラ イ ンでは、各ス テージが各 ク ロ ッ ク サ イ ク ルでア ク テ ィ ブです。 3 個の
命令を同時に実行可能で、 それぞれの命令が こ の 3 個のパ イ プ ラ イ ンの ス テージに 1 個ずつ含まれ
ます。 各命令を完了す る のに 3 ク ロ ッ ク サ イ ク ルがかか り ますが、 各パ イ プ ラ イ ンの ス テージは、
ほかの命令 と 平行に実行可能なので、 1 個の命令が完了す る 前に別の命令を実行可能です。 つま り 、
1 ク ロ ッ ク サ イ ク ルで 1 個の命令が フ ェ ッ チ さ れ、 次の命令がデ コ ー ド さ れ、 3 個目の命令は完了
し ます。 パ イ プ ラ イ ンでは、 ク ロ ッ ク サ イ ク ルご と に 1 個の命令を効率 よ く 完了で き ます。
命令 1
命令 2
サイ クル 1
サイ クル 2
サイ クル 3
フェ ッチ
デコー ド
実行
フェ ッチ
デコー ド
実行
フェ ッチ
デコー ド
命令 3
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
サイ クル 4
サイ クル 5
実行
19
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
分岐
その他のプ ロ セ ッ サ パ イ プ ラ イ ン と 同様に、 MicroBlaze のパ イ プ ラ イ ン ではパ イ プ ラ イ ンの実行
レー ト に影響す る 制御ハザー ド を発生 さ せ る こ と がで き ます。 プ ロ グ ラ ム (分岐) の制御フ ロ ーを変
更す る 命令が実行 さ れ、 そのプ ロ グ ラ ム フ ロ ー (taken 分岐) が変更 さ れ る と 、 その前のパ イ プ ラ イ
ン作業は無用に な り ま す。 プ ロ セ ッ サで taken 分岐が実行 さ れ る と 、 フ ェ ッ チお よ びデ コ ー ド ス
テージの命令が不正 と な り 、 こ れ ら は無効にす る か、 パ イ プ ラ イ ンか ら フ ラ ッ シ ュ さ れ る 必要があ
り ます。 プ ロ セ ッ サは、 正 し い命令でパ イ プ ラ イ ン を満たす必要があ り ます。 こ の場合、 taken 分岐
に対 し 3 ク ロ ッ ク サ イ ク ルがかか り 、 パ イ プ ラ イ ン を満たすのに 2 ク ロ ッ ク サ イ ク ルの レ イ テ ン
シが追加 さ れます。
MicroBlaze では taken 分岐のペナルテ ィ を低減す る ために 2 つの手法を使用 し ます。 1 つは、 遅延
ス ロ ッ ト を使用す る 手法で、 も う 1 つは ヒ ス ト リ バ ッ フ ァ を使用す る 方法です。
遅延ス ロ ッ ト
プ ロ セ ッ サで taken 分岐が実行 さ れ、 パ イ プ ラ イ ンが フ ラ ッ シ ュ さ れ る と 、 パ イ プ ラ イ ン を命令で
満たすのに 3 ク ロ ッ ク サ イ ク ルかか り ます。 分岐の次の命令を完了 さ せ る と 、 こ のペナルテ ィ を低
減で き ます。 フ ェ ッ チお よ びデ コ ー ド ス テージの両方の命令を フ ラ ッ シ ュ する かわ り に、 フ ェ ッ チ
ス テージのみを破棄 し 、 デ コ ー ド ス テージの命令を完了 さ せます。 こ の結果、 遅延分岐ま たは遅延
ス ロ ッ ト が効率的に生成 さ れます。 こ の手法では、 遅延ス ロ ッ ト の命令で成 さ れ る 作業が無効にな
ら ないため、2 ク ロ ッ ク サ イ ク ルか ら 1 ク ロ ッ ク サ イ ク ルに分岐ペナルテ ィ を効果的に低減で き ま
す。 遅延 ス ロ ッ ト の後続命令を 実行す る 分岐命令の コ ー ド には、 D と 示 さ れてい ま す。 た と えば、
BNE 命令では遅延 ス ロ ッ ト の後続命令が実行 さ れ ま せんが、 BNED 命令では制御が分岐 ロ ケー
シ ョ ンに転送 さ れ る 前に遅延ス ロ ッ ト の後続命令が実行 さ れます。
読み出 し /格納アーキテ ク チ ャ
MicroBlaze では、 次の 3 つのデー タ サ イ ズの メ モ リ にア ク セ ス で き ます。
•
バ イ ト (8 ビ ッ ト )
•
ハーフ ワ ー ド (16 ビ ッ ト )
•
ワ ー ド (32 ビ ッ ト )
メ モ リ のア ク セ ス では、 常にデー タ のサ イ ズに揃え ら れます。 ハーフ ワー ド ア ク セ ス では、 最下位
ア ド レ ス ビ ッ ト は強制的に 0 にな り ます。 同様に、 ワ ー ド ア ク セ ス では、 最下位ア ド レ ス ビ ッ ト
の 2 ビ ッ ト が強制的に 0 にな り ます。
ビ ッ グ エ ンデ ィ ア ン プ ロ セ ッ サであ る MicroBlaze では、 メ モ リ ア ク セ ス時には図 1-5 に示す よ
う な ビ ッ グ エ ンデ ィ ア ン ア ド レ スおよ び命名規則が 使用さ れま す。 次の短縮語が 使用さ れて い
ま す。
20
•
MSByte : Most Significant Byte (最上位バ イ ト )
•
LSByte : Least Significant Byte (最下位バ イ ト )
•
MSBit : Most Significant Bit (最上位ビ ッ ト )
•
LSBit : Least Significant Bit (最下位ビ ッ ト )
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
割 り 込み、 例外、 ブ レー ク
バイ ト ア ド レ ス
n
n+1
n+2
n+3
バイ ト 表記
0
1
2
3
MSByte
バイ ト 順
ビ ッ ト 表現
LSByte
31
0
ビッ ト順
MSBit
バイ ト ア ド レ ス
n
n+1
バイ ト 表記
0
1
ビ ッ ト 表現
LSByte
MSBit
バイ ト ア ド レ ス
n
バイ ト 表記
0
LSBit
MSByte
バイ ト 順
0
ハー フ ワー ド
15
0
ビッ ト順
ビ ッ ト 表現
LSBit
MSByte
バイ ト 順
ワー ド
バイ ト
7
ビ ッ ト 順 MSBit LSBit
図 1-5 : ビ ッ グ エ ンデ ィ ア ン デー タ タ イ プ
割 り 込み、 例外、 ブ レー ク
Reset ま たは Debug_Rst が発生す る と 、 MicroBlaze ではア ド レ ス 0 か ら 実行が開始 さ れます。 PC
お よ び MSR はデフ ォ ル ト 値に リ セ ッ ト さ れます。 Ext_Brk が発生す る と 、 MicroBlaze ではア ド レ
ス 0x18 か ら 実行が開始 さ れ、 レ ジ ス タ 16 に戻 り ア ド レ ス が格納 さ れます。 Ext_Brk は、 MSR の
BIP ビ ッ ト がア ク テ ィ ブの場合 (1 の場合) は実行 さ れません。 Ext_Brk が発生する と 、 MicroBlaze
ではア ド レ ス 0x18 か ら 実行が開始 さ れ、 レ ジ ス タ 16 に戻 り ア ド レ ス が格納 さ れ ま す。 こ れは、
MSR の BIP ビ ッ ト の値に関係せず発生 し ます。
割 り 込み
割 り 込みが発生す る と 、 MicroBlaze では割 り 込み要求を処理す る ために現在の実行を中断 し ます。
MicroBlaze は、 ア ド レ ス 0x00000010 に分岐 し 、 割 り 込み発生時に実行 さ れた命令の ア ド レ ス を
汎用レ ジ ス タ 14 に格納 し ます。 ま た、 マシ ン ス テー タ ス レ ジ ス タ (MSR) の割 り 込み イ ネーブル
フ ラ グ を ク リ アに し (MSR の ビ ッ ト 30 を 0 にセ ッ ト )、 今後の割 り 込みをデ ィ ス エーブルに し ま
す。 現在の PC がポ イ ン ト す る ア ド レ ス に含まれ る 命令は、 実行 さ れません。 割 り 込みは、 MSR レ
ジ ス タ の BIP ビ ッ ト がア ク テ ィ ブの場合 (1 の場合) は発生 し ません。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
21
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
レ イテンシ
割 り 込みが発生 し てか ら MicroBlaze が ISR (割 り 込みサービ ス ルーチン ) を呼び出すま でにかか る
時間は、 プ ロ セ ッ サの コ ン フ ィ ギ ュ レーシ ョ ンに よ っ て異な り ます。 MicroBlaze でハー ド ウ ェ ア除
算器を含む よ う に コ ン フ ィ ギ ュ レーシ ョ ン さ れてい る 場合、 除算命令の実行中に割 り 込みが発生す
る と 、 レ イ テ ン シは最大にな り ます。
表 1-6 にい く つかのケース での割 り 込みに対する レ イ テ ン シ を示 し ます。 こ の ク ロ ッ ク サ イ ク ル数
には、 現在の命令を完了す る ためのサ イ ク ル、 分岐す る ためサ イ ク ル、 お よび ISR の最初の命令に
ア ク セ スす る サ イ ク ルが含まれてい ます。
表 1-6 : 割 り 込みレ イ テ ン シ
ケース
LMB の ISR
OPB の ISR
通常
4 ク ロ ッ ク サイ クル
6 ク ロ ッ ク サイ クル
ハー ド ウ ェ ア除算器を含ま ない場合の
ワース ト ケース
6 ク ロ ッ ク サイ クル
8 ク ロ ッ ク サイ クル
ハー ド ウ ェ ア除算器を含む場合の
ワース ト ケース
38 ク ロ ッ ク サ イ ク ル
40 ク ロ ッ ク サ イ ク ル
擬似 コ ー ド
r14 ← PC
PC ← 0x00000010
MSR[IE] ← 0
例外
例外が発生す る と 、 MicroBlaze では例外を処理す る ために現在の処理を中断 し ま す。 MicroBlaze
は、 ア ド レ ス 0x00000008 に分岐 し 、 例外発生時に実行 さ れた命令の ア ド レ ス を汎用 レ ジ ス タ 17
に格納 し ます。 現在の PC がポ イ ン ト す る ア ド レ ス に含まれ る 命令は、 実行 さ れません。
擬似 コ ー ド
r17 ← PC
PC ← 0x00000008
ブ レーク
ブ レー ク には、 次の 2 種類があ り ます。
•
ソ フ ト ウ ェ ア (内部) ブ レー ク
•
ハー ド ウ ェ ア (外部) ブ レー ク
ソ フ ト ウ ェ ア ブ レーク
ソ フ ト ウ ェ ア ブ レー ク を実行す る には、 brk お よ び brki 命令を使用 し ます。 詳細は、 「MicroBlaze
命令セ ッ ト アーキテ ク チ ャ 」 の章を参照 し て く だ さ い。
22
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令キ ャ ッ シ ュ
ハー ド ウ ェ ア ブ レ ー ク
ハー ド ウ ェ ア ブ レー ク は、 外部のブ レー ク 信号を アサー ト す る こ と で実行 さ れます。 ハー ド ウ ェ ア
ブ レ ー ク が発生す る と 、 MicroBlaze で はブ レ ー ク を 処理す る た め に現在の処理 を 中断 し ま す。
MicroBlaze は、 ア ド レ ス 0x00000018 に分岐 し 、 ブ レ ー ク の発生時に実行 さ れた命令の ア ド レ ス
を汎用レ ジ ス タ 16 に格納 し ます。 ま た MicroBlaze では、マシ ン ス テー タ ス レ ジ ス タ で BIP (Break
In Progress) フ ラ グ を セ ッ ト (MSR でビ ッ ト 28 を 1 にセ ッ ト ) し 、今後のブ レー ク をデ ィ ス エーブ
ルに し ます。 現在の PC がポ イ ン ト す る ア ド レ ス に含まれ る 命令は、 実行 さ れません。
ハード ウ ェ ア ブレ ーク は、 実行中のブレ ーク がな いと き (BIP フ ラ グ が 0 にセッ ト さ れて いる と
き ) のみ処理 さ れます。 BIP フ ラ グは、 IE (Interrupt Enabled) フ ラ グ よ り も 優先 さ れます。 BIP フ ラ
グがセ ッ ト さ れてい る と き は割 り 込みは処理 さ れませんが、 割 り 込みデ ィ ス エーブル時に発生す る
ブ レー ク は即時に処理 さ れます。 ただ し 、 マ ス ク 不可のハー ド ウ ェ ア ブ レー ク は常に即時に処理 さ
れ る こ と に注意 し て く だ さ い。
擬似 コ ー ド
r16 ← PC
PC ← 0x00000018
MSR[BIP] ← 1
命令キ ャ ッ シ ュ
概要
MicroBlaze は、 LMB のア ド レ ス範囲外にあ る コ ー ド の実行時、 オプシ ョ ンの命令キ ャ ッ シ ュ を使
用 し てパフ ォーマン ス を向上 さ せ る こ と がで き ます。
命令キ ャ ッ シ ュ には、 次の特徴があ り ます。
•
ユーザーが指定可能なキ ャ ッ シ ュ 可能 メ モ リ 領域
•
コ ン フ ィ ギ ュ レーシ ョ ン可能なキ ャ ッ シ ュ サ イ ズお よび タ グ サ イ ズ
•
個別キ ャ ッ シ ュ ラ イ ン ロ ッ ク 機能
•
MSR レ ジ ス タ の新規ビ ッ ト を使用 し た キ ャ ッ シ ュ のオン /オフ制御
•
命令キ ャ ッ シ ュ への書 き 込み命令
•
特別な メ モ リ コ ン ト ロー ラ が不要、 既存の OPB ペ リ フ ェ ラ ル と 動作
•
キ ャ ッ シ ュ 可能なセグ メ ン ト お よ びキ ャ ッ シ ュ 不可能なセグ メ ン ト に メ モ リ を分割
•
領域ま たは周波数への影響が微量 (LUT 20 個未満)
•
命令側の LMB と 共に使用可能
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
23
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
キ ャ ッ シ ュの構成
命令キ ャ ッ シ ュ の 使用時に は、 メ モ リ ア ド レ ス の ス ペース はキ ャ ッ シ ュ 可能な セ グ メ ン ト と
キ ャ ッ シ ュ 不 可 能 な セ グ メ ン ト の 2 つ に 分 割 さ れ ま す。 キ ャ ッ シ ュ 可 能 な セ グ メ ン ト は、
C_ICACHE_BASEADDR およ び C_ICACHE_HIGHADDR の 2 つのセグ メ ン ト によ っ て 定義さ
れま す。 こ の範囲内のア ド レ ス は、 すべて キ ャ ッ シ ュ 可能な ス ペース セグ メ ン ト に対応し て いま
す。 その他のア ド レ ス は、 キ ャ ッ シュ 不可能な ア ド レ ス です。
命令ア ド レ ス ビ ッ ト
0
30 31
タグ ア ド レス
Addr
タグ
タグ
BRAM
Addr
キャ ッ シュ ラ イン
- -
Cache_Hit
=
Valid
命令
Cache_instruction_data
BRAM
図 1-6 : キ ャ ッ シ ュの構成
すべてのキ ャ ッ シ ュ 可能な命令ア ド レ スは、 キ ャ ッ シ ュ ラ イ ン セグ メ ン ト お よ び タ グ ア ド レ ス セ
グ メ ン ト の 2 つに分割 さ れます。 こ の 2 つのセグ メ ン ト のサ イ ズは、 ユーザーに よ っ て設定で き ま
す。 ビ ッ ト 0 と 最初の タ グ ア ド レ ス ビ ッ ト 間の ア ド レ ス は、 キ ャ ッ シ ュ で無視 さ れ ま す。 キ ャ ッ
シ ュ ラ イ ンのサ イ ズは、 9~14 ビ ッ ト に設定で き ます。 つま り 、 キ ャ ッ シ ュ サ イ ズの範囲は、 2KB
~ 64KB と な り ます。 タ グ ア ド レ ス のサ イ ズには制限があ り ません。
キ ャ ッ シ ュの動作
命令フ ェ ッ チ ス テージでは、 MicroBlaze は命令ア ド レ ス を命令ア ド レ ス バ ス に書 き 込み、 ready
信号を待機 し ます。 待ち状態を低減す る ために、命令 OPB お よ び命令 LMB で同時に リ ク エ ス ト が
1 つ処理 さ れ ます。 次の ク ロ ッ ク サ イ ク ルで LMB か ら acknowledge 信号を受信す る と 、 OPB か
ら の命令ア ク セ ス が中断 さ れます。 命令が フ ェ ッ チ さ れ る ご と に、 命令キ ャ ッ シ ュ では命令ア ド レ
ス がキ ャ ッ シ ュ 可能なセグ メ ン ト に属す る も のであ る かが検出 さ れます。 ア ド レ ス がキ ャ ッ シ ュ 不
可能な場合は、 キ ャ ッ シ ュ では命令が無視 さ れ、 LMB ま たは OPB で リ ク エ ス ト が実行 さ れます。
ア ド レ ス がキ ャ ッ シ ュ 可能な場合は、 ル ッ ク ア ッ プが タ グ メ モ リ で実行 さ れ、 リ ク エ ス ト さ れた命
令がキ ャ ッ シ ュ にあ る か ど う かが確認 さ れます。 有効な ビ ッ ト がセ ッ ト さ れ、 タ グ ア ド レ ス が命令
ア ド レ ス の タ グ ア ド レ ス セグ メ ン ト と 一致す る 場合、 ル ッ ク ア ッ プが正 し く 実行 さ れてい ます。
24
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令キ ャ ッ シ ュ
0、1 ( ロ ッ ク 、有効 )
タ グ BRAM
タグ ア ド レス
IOPB_Address
0
1
キャ ッ シュ ラ イン
Data
WE
Address
命令 BRAM
IOPB_Select
IOPB_XferAck
Address
IOPB_Data
WE
Data
図 1-7 : キ ャ ッ シ ュの動作
命令がキ ャ ッ シ ュ に含まれ る 場合、キ ャ ッ シ ュ は MicroBlaze に対 し ready 信号 (Cache_Hit) を、ア
ド レ ス に対 し 命令デー タ を駆動 し ま す。 命令がキ ャ ッ シ ュ に含 ま れない場合、 キ ャ ッ シ ュ は ready
信号を駆動 し ませんが、 OPB で リ ク エ ス ト が完了 し 、 キ ャ ッ シ ュ が新 し い情報で更新 さ れ る ま で待
機 し ます。
ソフ トウェア
MSR ビ ッ ト
MSR の ビ ッ ト 26 では、 キ ャ ッ シ ュ が イ ネーブルか ど う かが示 さ れ ま す。 MSR を 読み出すには
MFS 命令、 MSR に書 き 込むには MTS 命令が使用 さ れます。
キ ャ ッ シ ュ のデ ィ ス エーブル時には、 キ ャ ッ シ ュ の内容がデフ ォ ル ト で保持 さ れます。 WIC 命令を
使用す る か MicroBlaze のハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用す る と 、 キ ャ ッ シ ュ の内容を上書
き で き ます。
WIC 命令
WIC 命令を使用する と 、ソ フ ト ウ ェ ア プ ロ セ ッ サの命令キ ャ ッ シ ュ を更新で き ます。 アセンブ リ 命
令は、 次の と お り です。
WIC Ra,Rb
Ra にはキ ャ ッ シ ュ ラ イ ン、 タ グ ア ド レ ス、 有効/ ロ ッ ク ビ ッ ト が含め ら れ、 Rb には命令デー タ が
含め ら れます。
Ra(31) は ロ ッ ク ビ ッ ト 、 Ra(30) は有効ビ ッ ト ( ビ ッ ト が 1 にセ ッ ト さ れ る と き に有効)、 それ以外
の Ra には命令ア ド レ ス が含まれます。
こ の命令は、 キ ャ ッ シ ュ がデ ィ ス エーブルの と き のみ使用で き ま す。 ロ ッ ク ビ ッ ト につい て は、
「 ロ ッ ク ビ ッ ト 」 のセ ク シ ョ ン を参照 し て く だ さ い。
ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク
ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用す る と 、 WIC 命令 と 類似 し た操作を実行で き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
25
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
ロック ビッ ト
ロ ッ ク ビ ッ ト を使用す る と 、 キ ャ ッ シ ュ に コ ー ド セ グ メ ン ト を ロ ッ ク で き 、 命令実行時間を保証
で き ます。 ただ し キ ャ ッ シ ュ ラ イ ン を ロ ッ ク する と 、 キ ャ ッ シ ュ の ヒ ッ ト 数が減少す る 可能性があ
り ます。 こ れは、 キ ャ ッ シ ュ ラ イ ンの ロ ッ ク 時にキ ャ ッ シ ュ さ れなか っ た ア ド レ ス が含まれ る 可能
性があ る ためです。
ほ と ん ど の場合で、 命令 LMB を使用 し て コ ー ド セグ メ ン ト を ロ ッ ク す る 方法が好ま し い と 言え ま
す。 こ れは、 LMB にア ク セ スす る 待ち状態がキ ャ ッ シ ュ ヒ ッ ト の待ち状態 と 同様であ る ためです。
LMB メ モ リ
命令キ ャ ッ シ ュ の使用時で も 、 命令 LMB メ モ リ を使用で き ます。 ただ し 、 こ の場合の LMB ア ド
レ スは、 キ ャ ッ シ ュ 不可能な メ モ リ セグ メ ン ト に含まれてい る 必要があ り ます。
デー タ キ ャ ッ シ ュ
概要
MicroBlaze は、 LMB のア ド レ ス範囲外にあ る デー タ の読み出 し 時に、 オプシ ョ ンのデー タ キ ャ ッ
シ ュ を使用 し てパフ ォーマン ス を向上 さ せ る こ と がで き ます。
デー タ キ ャ ッ シ ュ には、 次の特徴があ り ます。
•
ラ イ ト スルー デー タ キ ャ ッ シ ュ
•
ユーザーが指定可能なキ ャ ッ シ ュ 可能 メ モ リ 領域
•
コ ン フ ィ ギ ュ レーシ ョ ン可能なキ ャ ッ シ ュ サ イ ズお よび タ グ サ イ ズ
•
個別キ ャ ッ シ ュ ラ イ ン ロ ッ ク 機能
•
MSR レ ジ ス タ の新規ビ ッ ト を使用 し た キ ャ ッ シ ュ のオン /オフ制御
•
デー タ キ ャ ッ シ ュ への書 き 込み命令
•
特別な メ モ リ コ ン ト ロー ラ が不要、 既存の OPB ペ リ フ ェ ラ ル と 動作
•
メ モ リ がキ ャ ッ シ ュ 可能なセグ メ ン ト お よ びキ ャ ッ シ ュ 不可能なセグ メ ン ト に整理 さ れてい る
•
領域ま たは周波数への影響が微量 (LUT 20 個未満)
•
デー タ 側の LMB と 共に使用可能
キ ャ ッ シ ュの構成
データ キ ャ ッ シ ュ の 使用時に は、 メ モ リ ア ド レ ス の ス ペース はキ ャ ッ シ ュ 可能な セ グ メ ン ト
と キ ャ ッ シ ュ 不 可 能 な セ グ メ ン ト の 2 つ に 分 割 さ れ ま す。 キ ャ ッ シ ュ 可 能 な 領 域 は、
C_DCACHE_BASEADDR およ び C_DCACHE_HIGHADDR の 2 つのセグ メ ン ト によ っ て定義
さ れま す。 こ の範囲内のア ド レ ス はすべて キ ャ ッ シ ュ 可能な ス ペース セグ メ ン ト に対応し て いま
す。 その他のア ド レ ス は、 キ ャ ッ シュ 不可能な ア ド レ ス です。
26
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
デー タ キ ャ ッ シ ュ
デー タ ア ド レ ス ビ ッ ト
0
3031
キャ ッ シュ ラ イン
タグ ア ド レス
タグ
Addr
BRAM
タグ
=
有効
- -
キャ ッ シュ ヒ ッ ト
Load_Instruction
Addr
デー タ
キ ャ ッ シ ュ デー タ
BRAM
図 1-8 : キ ャ ッ シ ュの構成
すべてのキ ャ ッ シ ュ 可能なデー タ ア ド レ ス は、 キ ャ ッ シ ュ ラ イ ン セグ メ ン ト お よ び タ グ ア ド レ ス
セグ メ ン ト の 2 つに分割 さ れます。 こ の 2 つのセグ メ ン ト のサ イ ズは、 ユーザーに よ っ て設定で き
ます。 ビ ッ ト 0 と 最初の タ グ ア ド レ ス ビ ッ ト 間のア ド レ ス は、 キ ャ ッ シ ュ で無視 さ れます。 キ ャ ッ
シ ュ ラ イ ンのサ イ ズは、 9~14 ビ ッ ト に設定で き ます。 つま り 、 キ ャ ッ シ ュ サ イ ズの範囲は、 8KB
~ 64KB と な り ます。 タ グ ア ド レ ス のサ イ ズには制限があ り ません。
キ ャ ッ シ ュの動作
MicroBlaze で格納命令が実行 さ れ る と 、 通常どお り 操作が実行 さ れますが、 ア ド レ ス がキ ャ ッ シ ュ
可能なア ド レ ス セグ メ ン ト に含まれ る 場合、 デー タ キ ャ ッ シ ュ は新規デー タ で更新 さ れます。
MicroBlaze で読み出 し 命令が実行 さ れ る と 、ア ド レ ス がキ ャ ッ シ ュ 可能な領域に含まれ る かが最初
に確認 さ れ、 次にそのア ド レ ス がデー タ キ ャ ッ シ ュ に含ま れ る かが確認 さ れ ます。 デー タ キ ャ ッ
シ ュ に含まれ る 場合は、 デー タ がデー タ キ ャ ッ シ ュ か ら フ ェ ッ チ さ れます。
0、1 ( ロ ッ ク 、有効 )
タ グ BRAM
タグ ア ド レス
DOPB_Address
キャ ッ シュ ラ イン
デー タ
WE
ア ド レス
Cacheable_address
命令 BRAM
DOPB_Select
DOPB_XferAck
DOPB_RNW
DOPB_Data
Address
WE
Data
図 1-9 : キ ャ ッ シ ュの動作
読み 出 し デー タ が キ ャ ッ シ ュ に 含 ま れ る 場合、 キ ャ ッ シ ュ は MicroBlaze に 対 し ready 信 号
(Cache_Hit) を、ア ド レ ス に対 し デー タ を駆動 し ます。 読み出 し デー タ がキ ャ ッ シ ュ に含まれない場
合、 キ ャ ッ シ ュ は ready 信号を駆動 し ませんが、 OPB が リ ク エ ス ト を完了す る ま で待機 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
27
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
ソフ トウェア
MSR ビ ッ ト
MSR の ビ ッ ト 24 では、 キ ャ ッ シ ュ が イ ネーブルか ど う かが示 さ れ ま す。 MSR を 読み出すには
MFS 命令、 MSR に書 き 込むには MTS 命令が使用 さ れます。
キ ャ ッ シ ュ のデ ィ ス エーブル時には、 キ ャ ッ シ ュ の内容がデフ ォ ル ト で保持 さ れま す。 WDC 命令
を使用す る か MicroBlaze のハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用す る と 、 キ ャ ッ シ ュ の内容を上
書 き で き ます。
メ モ : キ ャ ッ シ ュ は、 割 り 込みハン ド ラ ルーチンか ら はオン /オ フ にで き ません。 こ れは、 一度割 り
込みが処理 さ れ る と MSR への変更が失われ る ためです (MSR ス テー ト は割 り 込み処理後に復元 さ
れます)。
W D C 命令
WDC 命令を使用する と 、 ソ フ ト ウ ェ ア プ ロ セ ッ サのデー タ キ ャ ッ シ ュ を更新で き ます。 アセンブ
リ 命令は、 次の と お り です。
WDC Ra,Rb
Ra ではキ ャ ッ シ ュ ラ イ ン、 タ グ ア ド レ ス、 有効/ ロ ッ ク ビ ッ ト が含め ら れ、 Rb にはデー タ が含め
ら れます。
Ra(31) は ロ ッ ク ビ ッ ト 、 Ra(30) は有効ビ ッ ト ( ビ ッ ト が 1 にセ ッ ト さ れ る と き に有効)、 それ以外
の Ra には命令ア ド レ ス が含まれます。
こ の命令は、 キ ャ ッ シ ュ がデ ィ ス エーブルの と き のみ使用で き ま す。 ロ ッ ク ビ ッ ト につい て は、
「 ロ ッ ク ビ ッ ト 」 のセ ク シ ョ ン を参照 し て く だ さ い。
ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク
ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用す る と 、 WDC 命令 と 類似 し た操作を実行で き ます。
ロック ビッ ト
ロ ッ ク ビ ッ ト を使用す る と 、 キ ャ ッ シ ュ に コ ー ド セ グ メ ン ト を ロ ッ ク で き 、 デー タ が常にキ ャ ッ
シ ュ に含まれ る こ と を保証で き ます。 ただ し キ ャ ッ シ ュ ラ イ ン を ロ ッ ク する と 、 キ ャ ッ シ ュ の ヒ ッ
ト 数が減少す る 可能性があ り ます。 こ れは、 キ ャ ッ シ ュ ラ イ ンの ロ ッ ク 時にキ ャ ッ シ ュ さ れなかっ
た ア ド レ ス が含まれ る 可能性があ る ためです。
ほ と ん ど の場合で、 デー タ LMB を使用 し てデー タ を ロ ッ ク す る 方法が好ま し い と 言え ます。 こ れ
は、 LMB にア ク セ スす る 待ち状態がキ ャ ッ シ ュ ヒ ッ ト の待ち状態 と 同様であ る ためです。
LMB メ モ リ
デー タ キ ャ ッ シ ュ の使用時で も 、 デー タ LMB メ モ リ を使用で き ます。 ただ し 、 こ の場合の LMB
ア ド レ スは、 キ ャ ッ シ ュ 不可能な メ モ リ セグ メ ン ト に含まれてい る 必要があ り ます。
28
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
高速シ ン プ レ ッ ク ス リ ン ク (FSL) イ ン タ ー フ ェ イ ス
高速シ ン プ レ ッ ク ス リ ン ク (FSL) イ ン タ ー フ ェ イ ス
MicroBlaze には 8 入力、 8 出力の高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス が含まれま
す。 FSL イ ン タ ー フ ェ イ ス の詳細につい ては、 FSL バ ス の マ ニ ュ アル を 参照 し て く だ さ い。 FSL
チ ャ ネルは、 ポ イ ン ト ツー ポ イ ン ト 接続 さ れた単一方向デー タ ス ト リ ー ミ ン グ イ ン タ ーフ ェ イ ス
です。 MicroBlaze の FSL イ ン タ ーフ ェ イ スは、 32 ビ ッ ト 幅です。 ま た、 こ の FSL チ ャ ネルを使用
し て制御ワ ー ド ま たはデー タ ワー ド を転送、 受信で き ます。 別個の ビ ッ ト で、 転送 (受信) ワ ー ド が
制御情報ま たはデー タ 情報であ る かが示 さ れます。
FSL 読み出 し 命令
get 命令は、 入力 FSL チ ャ ネルか ら MicroBlaze レ ジ ス タ にデー タ ま たは制御を読み出すのに使用
し ます。 get 命令には、 次に記述す る 4 種類があ り ます。
Blocking Data Get 命令
blocking get を実行す る アセンブ リ 命令は、 次の と お り です。
get regM, fslN
blocking get 命令は、 デー タ が入力 FSL、 fslN で使用可能にな る ま で MicroBlaze のパ イ プ ラ イ ン
を中断 し ます。 デー タ が使用可能にな る と 、 こ の命令が 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 get 命
令は、 デー タ 値 を 取得す る のに使用 さ れ ま す。 get 命令が制御値 を 読み出すのに使用 さ れ る 場合
(fslN の control_in ビ ッ ト がセ ッ ト さ れてい る 場合)、 FSL のエ ラ ー ビ ッ ト は、 MSR ( ビ ッ ト 27) に
セ ッ ト さ れます。
Non-blocking Data Get 命令
non-blocking data get を実行す る アセンブ リ 命令は、 次の と お り です。
nget regM, fslN
non-blocking data get 命令は、 入力 FSL、 fslN でのデー タ の有無に関わ ら ず、 MicroBlaze のパ イ
プ ラ イ ン を中断 し ません。 命令は、 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 デー タ が使用可能な場合は、
MSR の キ ャ リ ー ビ ッ ト ( ビ ッ ト 29) がセ ッ ト さ れ ま す。 命令が正 し く 実行 さ れない と 、 MSR の
キ ャ リ ー ビ ッ ト が リ セ ッ ト さ れます。 MSR の ビ ッ ト 0 には、 キ ャ リ ー ビ ッ ト の コ ピーが含まれま
す。 こ のため、 キ ャ リ ーの直接分岐は、 nget 命令の次に実行で き ます。 nget 命令は、 デー タ 値の読
み出 し に も 使用 さ れます。 制御値が読み出 さ れ る 場合、FSL のエ ラ ー ビ ッ ト (MSR のビ ッ ト 27) が
セ ッ ト さ れます。
Blocking Control Get 命令
blocking control get を実行す る アセンブ リ 命令は、 次の と お り です。
cget regM, fslN
blocking control get 命令は、 デー タ が入力 FSL、 fslN で使用可能にな る ま で MicroBlaze のパ イ プ
ラ イ ン を中断 し ます。 デー タ が使用可能にな る と 、 こ の命令が 2 ク ロ ッ ク サ イ ク ルで完了 し ます。
cget 命令は、 制御値を 読み出す場合にも 使用さ れま す (fslN の control_in ビ ッ ト がセッ ト さ れま
す)。 読み出さ れた 値がデータ 値の場合、 FSL のエラ ー ビ ッ ト (MSR のビ ッ ト 27) がセッ ト さ れ
ま す。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
29
R
第 1 章 : MicroBlaze アーキテ ク チ ャ
Non-blocking Control Get 命令
non-blocking control get を実行す る 命令は、 次の と お り です。
ncget regM, fslN
non-blocking control get 命令は、 入力 FSL、 fslN でのデー タ の有無に関わ ら ず、 MicroBlaze のパ
イ プ ラ イ ン を中断 し ません。 命令は、 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 デー タ が、 使用可能な場
合は、 MSR のキ ャ リ ー ビ ッ ト ( ビ ッ ト 29) がセ ッ ト さ れます。 命令が正 し く 実行 さ れない と 、 MSR
のキ ャ リ ー ビ ッ ト が リ セ ッ ト さ れます。 MSR の ビ ッ ト 0 には、 キ ャ リ ー ビ ッ ト の コ ピーが含まれ
ます。 こ のため、 キ ャ リ ーの直接分岐は、 ncget 命令の次に実行で き ます。 ncget 命令は、 制御値を
読み出すの場合に も 使用 さ れます (fslN の control_in ビ ッ ト がセ ッ ト さ れます)。 読み出 さ れた値が
デー タ 値の場合、 FSL のエ ラ ー ビ ッ ト (MSR のビ ッ ト 27) がセ ッ ト さ れます。
FSL 書き込み命令
put 命令は、 出力 FSL チ ャ ネルか ら MicroBlaze レ ジ ス タ にデー タ ま たは制御を書 き 込むのに使用
し ます。 put 命令には、 次に記述す る 4 種類があ り ます。
Blocking Data Put 命令
blocking data put を実行する アセ ンブ リ 命令は、 次の と お り です。
put regM, fslN
blocking data put 命令は、 出力 FSL、 fslN にデー タ が書 き 込み可能にな る ま で MicroBlaze パ イ プ
ラ イ ン を中断 し ます (デー タ はフル ビ ッ ト がセ ッ ト さ れていない と き に書 き 込み可能です)。 デー タ
が書 き 込み可能にな る と 、 こ の命令が 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 put 命令は、 デー タ 値を
書 き 込む場合に も 使用 さ れます (fslN の control_in ビ ッ ト が リ セ ッ ト さ れます)。
Non-blocking Data Put 命令
non-blocking data put を実行する アセ ンブ リ 命令は、 次の と お り です。
nput regM, fslN
non-blocking data put 命令は、 出力 FSL、 fslN にデー タ が書 き 込み可能であ る かないかに関わ ら ず
MicroBlaze パ イ プ ラ イ ン を中断 し ま せん (デー タ は フ ル ビ ッ ト がセ ッ ト さ れていない と き に書 き
込み可能です)。 命令は、 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 デー タ の書 き 込みが正 し く 実行 さ れ る
と 、 MSR の キ ャ リ ー ビ ッ ト ( ビ ッ ト 29) がセ ッ ト さ れ ま す。 デー タ が正 し く 書 き 込 ま れない と 、
MSR のキ ャ リ ー ビ ッ ト が リ セ ッ ト さ れ ます。 MSR の ビ ッ ト 0 には、 キ ャ リ ー ビ ッ ト の コ ピーが
含まれます。 こ のため、 キ ャ リ ーの直接分岐は、 nput 命令の次に実行で き ます。 nput 命令は、 デー
タ 値を書 き 込む場合に も 使用 さ れます (fslN の control_out ビ ッ ト が リ セ ッ ト さ れます)。
Blocking Control Put 命令
blocking control put を実行す る アセ ンブ リ 命令は、 次の と お り です。
cput regM, fslN
blocking data put 命令は、 出力 FSL、 fslN にデー タ が書 き 込み可能にな る ま で MicroBlaze パ イ プ
ラ イ ン を中断 し ます (デー タ はフル ビ ッ ト がセ ッ ト さ れていない と き に書 き 込み可能です)。 デー タ
が書 き 込み可能にな る と 、 こ の命令が 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 put 命令は、 制御値を書
き 込む場合に使用 さ れます (fslN の control_out ビ ッ ト が リ セ ッ ト さ れます)。
30
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
デバ ッ グ イ ン タ ー フ ェ イ ス
Non-blocking Data Put 命令
non-blocking data put を実行する アセ ンブ リ 命令は、 次の と お り です。
ncput regM, fslN
non-blocking data put 命令は、 出力 FSL、 fslN にデー タ が書 き 込み可能であ る かないかに関わ ら ず
MicroBlaze パ イ プ ラ イ ン を中断 し ま せん (デー タ は フ ル ビ ッ ト がセ ッ ト さ れていない と き に書 き
込み可能です)。 命令は、 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 デー タ の書 き 込みが正 し く 実行 さ れ る
と 、 MSR の キ ャ リ ー ビ ッ ト ( ビ ッ ト 29) がセ ッ ト さ れ ま す。 デー タ が正 し く 書 き 込 ま れない と 、
MSR のキ ャ リ ー ビ ッ ト が リ セ ッ ト さ れ ます。 MSR の ビ ッ ト 0 には、 キ ャ リ ー ビ ッ ト の コ ピーが
含まれます。 こ のため、 キ ャ リ ーの直接分岐は、 nput 命令の次に実行で き ます。 nput 命令は、 制御
値を書 き 込む場合に も 使用 さ れます (fslN の control_out ビ ッ ト がセ ッ ト さ れます)。
デバ ッ グ イ ン タ ー フ ェ イ ス
MicroBlaze の 特徴 と も 言 え る デ バ ッ グ イ ン タ ー フ ェ イ ス で は、 XMD (Xilinx Microprocessor
Debug ) の よ う な JTAG ベース の ソ フ ト ウ ェ ア デバ ッ グ ツール (通常 BDM ま たはバ ッ グ グ ラ ン ド
デバ ッ グ モー ド デバ ッ ガ と 呼ばれ る も の) がサポー ト さ れてい ます。 こ のデバ ッ グ イ ン タ ーフ ェ イ
ス は、 ザ イ リ ン ク ス FPGA の JTAG ポー ト と イ ン タ ーフ ェ イ スす る 、 ザ イ リ ン ク ス のマ イ ク ロ プ
ロ セ ッ サ デバ ッ グ モ ジ ュ ール (MDM) IP コ ア に接続す る よ う に設計 さ れて い ま す。 マルチプ ロ
セ ッ サのデバ ッ グ を イ ネーブルにす る ために複数の MicroBlaze を 1 個の MDM に イ ン タ ーフ ェ イ
ス さ せ る こ と がで き ます。
デバ ッ グの特徴
•
ハー ド ウ ェ アのブ レー ク ポ イ ン ト 数お よ びウ ォ ッ チポ イ ン ト 数を設定可能、 ソ フ ト ウ ェ アのブ
レー ク ポ イ ン ト 数は無制限
•
外部プ ロ セ ッ サ制御に よ り デバ ッ グ ツールで MicroBlaze を停止、 リ セ ッ ト 、 シ ン グル ス テ ッ
プ可能
•
デー タ お よ び PC、 MSR を含む全レ ジ ス タ か ら の読み出 し お よ び こ れ ら の レ ジ ス タ への
書 き 込み
•
複数プ ロ セ ッ サのサポー ト
•
命令キ ャ ッ シ ュ お よ びデー タ キ ャ ッ シ ュ への書 き 込み
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
31
R
32
第 1 章 : MicroBlaze アーキテ ク チ ャ
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
第2章
MicroBlaze バス イ ン タ ー フ ェ イ ス
サマ リ
こ の章では、 MicroBlaze ロ ーカル メ モ リ バ ス (LMB) お よびオンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB)
の イ ン タ ーフ ェ イ ス について説明 し ます。
概要
MicroBlaze コ アは、 デー タ ア ク セ スお よ び命令ア ク セ ス に対 し 別々のバ ス イ ン タ ーフ ェ イ ス ユ
ニ ッ ト を持つハーバー ド アーキ テ ク チ ャ 構造にな っ てい ます。 各バ ス ユニ ッ ト は、 ロ ーカル メ モ
リ バ ス (OMB) と IBM のオンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB) か ら 構成 さ れます。 LMB では、 オ
ンチ ッ プのデ ュ アル ポー ト ブ ロ ッ ク RAM に単一周期でア ク セ ス で き ます。 OPB イ ン タ ーフ ェ イ
ス は、 オ ン チ ッ プ と オ フ チ ッ プ の 両 方 の ペ リ フ ェ ラ ル お よ び メ モ リ に 接 続 で き ま す。 ま た、
MicroBlaze コ アでは高速シ ンプ レ ッ ク ス リ ン ク (FSL) バ ス に対 し て 8 入力お よ び 8 出力 イ ン タ ー
フ ェ イ スが提供さ れま す。 FSL バス は、 単一方向、 ア ービ ト レ ーシ ョ ン な し の専用通信チャ ネル
です。
機能
MicroBlaze バ ス の イ ン ターフ ェ イ ス には、 次の機能が含まれます。
•
バ イ ト イ ネーブル付 き OPB V2.0 バ ス イ ン タ ーフ ェ イ ス (IBM の 『64-Bit On-Chip Peripheral
Bus, Architectural Specifications, Version 2.0』 を参照)
•
LMB ではブ ロ ッ ク RAM を効率 よ く 転送す る 単純な同期プ ロ ト コ ルを提供
•
LMB では、 ロ ーカル メ モ リ サブシ ス テ ムに対 し 125MHz のパフ ォーマ ン ス を保障
•
FSL では、 高速でアービ ト レーシ ョ ンがない ス ト リ ー ミ ン グ通信 メ カ ニズ ム を提供
バス コ ン フ ィ ギ ュ レーシ ョ ン
図 2-1 に示すブ ロ ッ ク 図には、 MicroBlaze コ アお よ びそのバ ス イ ン タ ーフ ェ イ ス が示 さ れてい ま
す。 コ アお よ びバ ス イ ン ターフ ェ イ ス の定義は、 次の と お り です。
DOPB : デー タ イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス
DLMB : デー タ イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ)
IOPB : 命令 イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス
ILMB : 命令 イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ)
MFSL0..MFSL7 : マ ス タ デー タ イ ン タ ーフ ェ イ ス、 高速シ ンプ レ ッ ク ス リ ン ク
SFSL0..SFSL7 : ス レーブ デー タ イ ン タ ーフ ェ イ ス、 高速シ ンプ レ ッ ク ス リ ン ク
コ ア : 多種の信号 ( ク ロ ッ ク 、 リ セ ッ ト 、 割 り 込み)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
33
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
命令側
バス イ ン タ ー フ ェ イ ス
デー タ 側
バス イ ン タ ー フ ェ イ ス
加算 / 減算
IOPB
プ ログ ラ ム
カ ウン タ
DOPB
シ フ ト / 論理
乗算
バス
IF
MFSL0..7
バス
IF
命令
デコー ド
SFSL0..7
レ ジ ス タ フ ァ イル
命令
バッ フ ァ
32X32b
DLMB
ILMB
図 2-1 : MicroBlaze コ アのブ ロ ッ ク 図
MicroBlaze のバ ス イ ン タ ーフ ェ イ ス は、 次の図に示す よ う に 6 種類の コ ン フ ィ ギ ュ レーシ ョ ンで
使用で き ます。
メ モ : こ れ ら の 6 種類の コ ン フ ィ ギ ュ レーシ ョ ンは、 すべて FSL バ ス コ ン フ ィ ギ ュ レーシ ョ ン と
共に使用で き ます。
IOPB
DOPB
ILMB
DLMB
IOPB
DLMB
1
IOPB
DOPB
DOPB
ILMB
2
DOPB
IOPB
DLMB
3
DOPB
ILMB
DOPB
ILMB
4
5
6
図 2-2 : MicroBlaze のバス コ ン フ ィ ギ ュ レーシ ョ ン
コ ー ド のサ イ ズお よ びデー タ スペース に よ っ て、 アプ リ ケーシ ョ ンに最適な コ ン フ ィ ギ ュ レーシ ョ
ンは異な り ます。 ま た、内部ブ ロ ッ ク RAM へ高速にア ク セ スす る 必要があ る 場合に も 異な り ます。
34
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バス コ ン フ ィ ギ ュ レーシ ョ ン
各 コ ン フ ィ ギ ュ レーシ ョ ンでのパフ ォーマン スお よ びサポー ト さ れ る メ モ リ モデルを、次の表に示
し ます。
表 2-1 : MicroBlaze のバス コ ン フ ィ ギ ュ レーシ ョ ン
コ ン フ ィ ギ ュ レーシ ョ ン
コア
Fmax
使用可能なデバ ッ グ
サポー ト さ れる メ モ リ モデル
1
IOPB+ILMB+DOPB+DLMB
110
SW/JTAG
大規模な外部命令 メ モ リ
高速な内部命令 メ モ リ (BRAM)
大規模な外部デー タ メ モ リ
高速な内部デー タ メ モ リ (BRAM)
2
IOPB+DOPB+DLMB
125
SW/JTAG
大規模な外部命令 メ モ リ
大規模な外部デー タ メ モ リ
高速な内部デー タ メ モ リ (BRAM)
3
ILMB+DOPB+DLMB
125
SW/JTAG
高速な内部命令 メ モ リ (BRAM)
大規模な外部デー タ メ モ リ
高速な内部デー タ メ モ リ (BRAM)
4
IOPB+ILMB+DOPB
110
JTAG (ILMB メ モ リ 1 用)
SW (IOPB メ モ リ 用)
大規模な外部命令 メ モ リ
高速な内部命令 メ モ リ (BRAM)
大規模な外部デー タ メ モ リ
5
IOPB+DOPB
125
SW/JTAG
大規模な外部命令 メ モ リ
大規模な外部デー タ メ モ リ
6
ILMB+DOPB
125
JTAG1
高速な内部命令 メ モ リ (BRAM)
大規模な外部デー タ メ モ リ
メ モ : デ ュ アル ポー ト の あ る ILMB BRAM のセ カ ン ド ポー ト が OPB の BRAM メ モ リ コ ン ト
ロ ー ラ に接続 さ れてい る 場合、 ILMB メ モ リ は ソ フ ト ウ ェ アに常駐す る モニ タ を介 し てデバ ッ グで
き ます。 図 2-6 お よ び図 2-8 を参照 し て く だ さ い。 いずれの コ ン フ ィ ギ ュ レーシ ョ ン も 特殊な FSL
コ ン フ ィ ギ ュ レーシ ョ ン と 共に使用で き ます。 図 2-9 を参照 し て く だ さ い。
典型的なペ リ フ ェ ラル配置
こ のセ ク シ ョ ンでは、各コ ン フ ィ ギ ュ レーシ ョ ンお よ び FSL コ ン フ ィ ギ ュ レーシ ョ ンでの典型的な
ペ リ フ ェ ラ ル配置お よ び使用法につい て説明 し ま す。 MicroBlaze シ ス テ ム の内部接続にはオプ
シ ョ ンが多数あ る ため、 次の例を参照に し てアプ リ ケーシ ョ ンで使用す る 最適な コ ン フ ィ ギ ュ レー
シ ョ ン を選択 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
35
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
コ ン フ ィ ギ ュ レ ーシ ョ ン 1
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
OPB 間の
ブリ ッジ
割 り 込み
コ ン ト ロー ラ
タ イマ /
カ ウン タ
お よ び WDT
MicroBlaze CPU コ ア
命令側 OPB
命令側 LMB
IOPB
DOPB
ILMB
DLMB
デー タ 側 OPB
デー タ 側 LMB
UART
A
デ ュ アル ポー ト
ブ ロ ッ ク RAM
その他の OPB
マ ス タ 、 ス レ ーブ、
ま たはブ リ ッ ジ
B
図 2-3 : コ ン フ ィ ギ ュ レーシ ョ ン 1 : IOPB+ILMB+DOPB+DLMB
用途
ア プ リ ケーシ ョ ン で必要 と な る 命令 メ モ リ お よ びデー タ メ モ リ が、 オ ン チ ッ プのブ ロ ッ ク RAM
(BRAM) で使用可能な容量を超え る 場合に、 こ の コ ン フ ィ ギ ュ レーシ ョ ン を使用 し ます。 命令 メ モ
リ お よ びデー タ メ モ リ の重要なセ ク シ ョ ンは、 アプ リ ケーシ ョ ンのパフ ォーマン ス を向上 さ せ る た
めに高速な ILMB BRAM に割 り 当て ら れます。 必要 と な る デー タ メ モ リ 容量に よ っ ては、 デー タ
側の メ モ リ コ ン ト ロー ラ は不要 と な り ます。 デー タ 側の OPB は、 UART、 タ イ マ、 汎用 I/O、 追加
の BRAM、 お よ びカ ス タ ム ペ リ フ ェ ラ ルの よ う なその他のペ リ フ ェ ラ ルに も 使用で き ます。 OPB
間のブ リ ッ ジは、 ソ フ ト ウ ェ ア ベース のデバ ッ グの よ う に、 デー タ 側の OPB で命令側の OPB ペ
リ フ ェ ラ ルへのア ク セ ス が必要な場合にのみ必要 と な り ます。
典型的な ア プ リ ケーシ ョ ン
•
MPEG デ コ ーダ
•
通信 コ ン ト ロ ー ラ
•
プ ロ セ ス制御お よ びその他のエンべデ ッ ド アプ リ ケーシ ョ ン向けの複雑な ス テー ト マシ ン
•
セッ ト ト ップ ボッ クス
特徴
各側に 2 個のバ ス を イ ンプ リ メ ン ト す る のに余分な ロ ジ ッ ク が必要 と な る ため、 各側に 1 個のバ ス
を持つ コ ン フ ィ ギ ュ レーシ ョ ンに比べて CPU の最大 ク ロ ッ ク レー ト がわずかに低 く な り ます。 こ
の コ ン フ ィ ギ ュ レーシ ョ ンでは、 ソ フ ト ウ ェ ア ベース のデバ ッ グ (常駐のモニ タ デバ ッ グ ) ま たは
ハー ド ウ ェ ア ベース の JTAG デバ ッ グのいずれか を使用 し て、 アプ リ ケーシ ョ ン コ ー ド をデバ ッ
グで き ます。
36
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バス コ ン フ ィ ギ ュ レーシ ョ ン
コ ン フ ィ ギ ュ レ ーシ ョ ン 2
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
メモリ
コ ン ト ロー ラ
( 外部 メ モ リ )
OPB 間の
ブリッジ
割 り 込み
コ ン ト ロー ラ
タ イマ /
カ ウン タ
お よ び WDT
MicroBlaze CPU コ ア
IOPB
命令側 OPB
デー タ 側 OPB
DOPB
デー タ 側 LMB
DLMB
UART
その他の OPB
マ ス タ 、 ス レーブ、
またはブ リ ッ ジ
ブ ロ ッ ク RAM
図 2-4 : コ ン フ ィ ギ ュ レーシ ョ ン 2 : IOPB+DOPB+DLMB
用途
アプ リ ケーシ ョ ンで必要 と な る 命令 メ モ リ お よ びデー タ メ モ リ が、 オンチ ッ プ BRAM で使用可能
な容量を超え る 場合に、 こ の コ ン フ ィ ギ ュ レーシ ョ ン を使用 し ます。 こ の コ ン フ ィ ギ ュ レーシ ョ ン
では、命令 メ モ リ がすべてオ フ チ ッ プ メ モ リ ま たは命令側 OPB のオンチ ッ プ メ モ リ に常駐 し てい
ま す。 必要 と な る デー タ メ モ リ 容量に よ っ ては、 デー タ 側の メ モ リ コ ン ト ロ ー ラ は不要 と な り ま
す。 デー タ 側の OPB は、 UART、 タ イ マ、 汎用 I/O、 追加の BRAM、 お よ びカ ス タ ム ペ リ フ ェ ラ
ルの よ う なその他のペ リ フ ェ ラ ルに も 使用で き ます。 OPB 間のブ リ ッ ジは、ソ フ ト ウ ェ ア ベース の
デバ ッ グの よ う に、デー タ 側の OPB で命令側の OPB ペ リ フ ェ ラ ルへのア ク セ ス が必要な場合にの
み必要 と な り ます。
典型的な ア プ リ ケーシ ョ ン
•
MPEG デ コ ーダ
•
通信 コ ン ト ロ ー ラ
•
プ ロ セ ス制御お よ びその他のエンべデ ッ ド アプ リ ケーシ ョ ン向けの複雑な ス テー ト マシ ン
•
セッ ト ト ップ ボッ クス
特徴
こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、 命令側のバ ス構造が比較的単純なため、 CPU コ アが最大 ク ロ ッ
ク レ ー ト で動作可能です。 た だ し 、 OPB での命令 フ ェ ッ チの速度は、 LMB 上の BRAM か ら の
フ ェ ッ チに比べて遅 く な り ます。 内部命令 ヒ ス ト リ バ ッ フ ァ か ら コ ー ド の大部分が実行 さ れない限
り 、 プ ロ セ ッ サ全体のパ フ ォ ーマ ン ス は、 LMB を使用 し た イ ン プ リ メ ン テーシ ョ ン に比べて低 く
な り ま す。 こ の コ ン フ ィ ギ ュ レ ーシ ョ ン では、 ソ フ ト ウ ェ ア ベー ス のデバ ッ グ (常駐のモニ タ デ
バ ッ グ ) ま たはハー ド ウ ェ ア ベー ス の JTAG デバ ッ グ のいずれか を 使用 し て、 ア プ リ ケーシ ョ ン
コー ド をデバ ッ グで き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
37
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
コ ン フ ィ ギ ュ レ ーシ ョ ン 3
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
割 り 込み
コ ン ト ローラ
タ イマ /
カ ウン タ
お よ び WDT
MicroBlaze CPU コ ア
デー タ 側 OPB
DOPB
命令側 LMB
ILMB
DLMB
デー タ 側 LMB
UART
A
その他の OPB
マス タ 、 ス レーブ、
またはブ リ ッ ジ
B
デ ュ アル ポー ト
ブ ロ ッ ク RAM
図 2-5 : コ ン フ ィ ギ ュ レーシ ョ ン 3 : ILMB+DOPB+DLMB
用途
アプ リ ケーシ ョ ン コー ド はオンチ ッ プ BRAM に フ ィ ッ ト す る が、デー タ メ モ リ 用に メ モ リ が さ ら
に必要 と な る 場合に、 こ の コ ン フ ィ ギ ュ レーシ ョ ン を使用 し ます。 デー タ メ モ リ の重要なセ ク シ ョ
ンは、 アプ リ ケーシ ョ ンのパフ ォーマ ン ス を向上 さ せ る ために高速な DLMB BRAM に割 り 当て ら
れます。 必要 と な る デー タ メ モ リ 容量に よ っ ては、デー タ 側の メ モ リ コ ン ト ロ ー ラ は不要 と な り ま
す。 デー タ 側の OPB は、 UART、 タ イ マ、 汎用 I/O、 追加の BRAM、 お よ びカ ス タ ム ペ リ フ ェ ラ
ルの よ う なその他のペ リ フ ェ ラ ルに も 使用で き ます。
典型的な ア プ リ ケーシ ョ ン
•
デー タ 量の多い コ ン ト ロ ー ラ
•
小規模か ら 中規模の ス テー ト マシ ン
特徴
こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、 命令側のバ ス構造が比較的単純なため、 CPU コ アが最大 ク ロ ッ
ク レー ト で動作可能です。 命令側の LMB では、 1 ク ロ ッ ク に命令 1 個を効率 よ く ア ク セ ス で き る
よ う に BRAM か ら の読み出 し が 2 ク ロ ッ ク でパ イ プ ラ イ ン処理 さ れ ます。 こ の コ ン フ ィ ギ ュ レー
シ ョ ンでは、 ソ フ ト ウ ェ ア ベース のデバ ッ グ (常駐のモニ タ デバ ッ グ ) ま たはハー ド ウ ェ ア ベース
の JTAG デバ ッ グのいずれかを使用 し て、 アプ リ ケーシ ョ ン コー ド をデバ ッ グで き ます。
38
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バス コ ン フ ィ ギ ュ レーシ ョ ン
コ ン フ ィ ギ ュ レ ーシ ョ ン 4
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
OPB 間の
ブリ ッジ
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
割 り 込み
コ ン ト ローラ
タ イマ /
カウン タ
お よび WDT
MicroBlaze CPU コ ア
デー タ 側 OPB
IOPB
命令側 OPB
命令側 LMB
DOPB
ILMB
BRAM メ モ リ
コ ン ト ロー ラ
UART
その他の OPB
マ ス タ 、 ス レ ーブ、
ま たはブ リ ッ ジ
ブ ロ ッ ク RAM
図 2-6 : コ ン フ ィ ギ ュ レーシ ョ ン 4 : IOPB+ILMB+DOPB
用途
アプ リ ケーシ ョ ンで必要 と な る 命令 メ モ リ お よ びデー タ メ モ リ が、 オンチ ッ プ BRAM で使用可能
な容量を超え る 場合に、 こ の コ ン フ ィ ギ ュ レーシ ョ ン を使用 し ます。 命令 メ モ リ の重要なセ ク シ ョ
ンは、 アプ リ ケーシ ョ ンのパフ ォーマ ン ス を向上 さ せ る ために高速な ILMB BRAM に割 り 当て ら
れます。 デー タ 側の OPB は、 UART、 タ イ マ、 汎用 I/O、 追加の BRAM、 お よ びカ ス タ ム ペ リ フ ェ
ラ ルの よ う なその他のペ リ フ ェ ラ ルお よ び外部 メ モ リ コ ン ト ロ ー ラ に も 使用で き ます。 OPB 間の
ブ リ ッ ジは、 ソ フ ト ウ ェ ア ベース のデバ ッ グの よ う に、デー タ 側の OPB で命令側の OPB ペ リ フ ェ
ラ ルへのア ク セ ス が必要な場合にのみ必要 と な り ます。
典型的な ア プ リ ケーシ ョ ン
•
MPEG デ コ ーダ
•
通信 コ ン ト ロ ー ラ
•
プ ロ セ ス制御お よ びその他のエンべデ ッ ド アプ リ ケーシ ョ ン向けの複雑な ス テー ト マシ ン
•
セッ ト ト ップ ボッ クス
特徴
各側に 2 個のバ ス を イ ンプ リ メ ン ト す る のに余分な ロ ジ ッ ク が必要 と な る ため、 各側に 1 個のバ ス
を持つ コ ン フ ィ ギ ュ レーシ ョ ンに比べて CPU の最大 ク ロ ッ ク レー ト がわずかに低 く な り ます。 こ
の コ ン フ ィ ギ ュ レーシ ョ ンでは、 ソ フ ト ウ ェ ア ベース のデバ ッ グ (常駐のモニ タ デバ ッ グ ) ま たは
ハー ド ウ ェ ア ベース の JTAG デバ ッ グのいずれか を使用 し て、 アプ リ ケーシ ョ ン コ ー ド をデバ ッ
グで き ます。 ただ し 、 ソ フ ト ウ ェ ア ベース で ILMP BRAM の コ ー ド をデバ ッ グで き る のは、 LMB
BRAM への書 き 込みを可能にす る BRAM メ モ リ コ ン ト ロ ー ラ がデー タ 側の OPB バ ス に含まれて
い る 場合のみです。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
39
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
コ ン フ ィ ギ ュ レ ーシ ョ ン 5
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
OPB 間の
ブリ ッジ
メモリ
コ ン ト ロー ラ
( 外部 メ モ リ )
割 り 込み
コ ン ト ロー ラ
タ イマ /
カウン タ
お よび WDT
MicroBlaze CPU コ ア
命令側 OPB
IOPB
DOPB
デー タ 側 OPB
UART
その他の OPB
マ ス タ 、 ス レーブ、
またはブ リ ッ ジ
図 2-7 : コ ン フ ィ ギ ュ レーシ ョ ン 5 : IOPB+DOPB
用途
外部命令 メ モ リ お よ びデー タ メ モ リ が必要な場合に、 こ の コ ン フ ィ ギ ュ レーシ ョ ン を使用 し ます。
こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、 命令 メ モ リ がすべてオ フチ ッ プ メ モ リ ま たは OPB バ ス のオン
チ ッ プ メ モ リ に常駐 し てい ます。 デー タ 側の OPB は、 UART、 タ イ マ、 汎用 I/O、 追加の BRAM、
お よ びカ ス タ ム ペ リ フ ェ ラ ルの よ う なその他のペ リ フ ェ ラ ルお よ び外部 メ モ リ コ ン ト ロ ー ラ に も
使用で き ます。 OPB 間のブ リ ッ ジは、 ソ フ ト ウ ェ ア ベース のデバ ッ グの よ う に、 デー タ 側の OPB
で命令側の OPB ペ リ フ ェ ラ ルへのア ク セ ス が必要な場合にのみ必要 と な り ます。
典型的な ア プ リ ケーシ ョ ン
•
MPEG デ コ ーダ
•
通信 コ ン ト ロ ー ラ
•
プ ロ セ ス制御お よ びほかのエンべデ ッ ド アプ リ ケーシ ョ ンでの複雑な ス テー ト マシ ン
•
セッ ト ト ップ ボッ クス
特徴
こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、 命令側のバ ス構造が比較的単純なため、 CPU コ アが最大 ク ロ ッ
ク レ ー ト で動作可能です。 た だ し 、 OPB での命令 フ ェ ッ チの速度は、 LMB 上の BRAM か ら の
フ ェ ッ チに比べて遅 く な り ます。 内部命令 ヒ ス ト リ バ ッ フ ァ か ら コ ー ド の大部分が実行 さ れない限
り 、 プ ロ セ ッ サ全体のパ フ ォ ーマ ン ス は、 LMB を使用 し た イ ン プ リ メ ン テーシ ョ ン に比べて低 く
な り ま す。 こ の コ ン フ ィ ギ ュ レ ーシ ョ ン では、 ソ フ ト ウ ェ ア ベー ス のデバ ッ グ (常駐のモニ タ デ
バ ッ グ ) ま たはハー ド ウ ェ ア ベー ス の JTAG デバ ッ グ のいずれか を 使用 し て、 ア プ リ ケーシ ョ ン
コー ド をデバ ッ グで き ます。
40
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バス コ ン フ ィ ギ ュ レーシ ョ ン
コ ン フ ィ ギ ュ レ ーシ ョ ン 6
メモリ
コ ン ト ローラ
( 外部 メ モ リ )
タ イマ /
カ ウン タ
お よ び WDT
割 り 込み
コ ン ト ローラ
MicroBlaze CPU コ ア
デー タ 側 OPB
DOPB
命令側 LMB
ILMB
BRAM メ モ リ
コ ン ト ロー ラ
UART
その他の OPB
マ ス タ 、 ス レーブ、
またはブ リ ッ ジ
デ ュ アル ポー ト
ブ ロ ッ ク RAM
図 2-8 : コ ン フ ィ ギ ュ レーシ ョ ン 6 : ILMB+DOPB
用途
アプ リ ケーシ ョ ン コ ー ド はオ ンチ ッ プ ILM BRAM に フ ィ ッ ト す る が、 デー タ メ モ リ 用に メ モ リ
が さ ら に必要 と な る 場合に、 こ の コ ン フ ィ ギ ュ レ ー シ ョ ン を 使用 し ま す。 デー タ 側の OPB は、
UART、 タ イ マ、 汎用 I/O、 追加の BRAM、 お よ びカ ス タ ム ペ リ フ ェ ラ ルの よ う なその他のペ リ
フ ェ ラ ルお よ び外部 メ モ リ コ ン ト ロー ラ に も 使用で き ます。
典型的な ア プ リ ケーシ ョ ン
•
最小 コ ン ト ロ ー ラ
•
小規模か ら 中規模の ス テー ト マシ ン
特徴
こ の コ ン フ ィ ギ ュ レーシ ョ ンでは、 命令側のバ ス構造が比較的単純なため、 CPU コ アが最大 ク ロ ッ
ク レー ト で動作可能です。 命令側の LMB では、 1 ク ロ ッ ク に命令 1 個を効率 よ く ア ク セ ス で き る
よ う に BRAM か ら の読み出 し が 2 ク ロ ッ ク でパ イ プ ラ イ ン処理 さ れ ます。 こ の コ ン フ ィ ギ ュ レー
シ ョ ンでは、 ソ フ ト ウ ェ ア ベース のデバ ッ グ (常駐のモニ タ デバ ッ グ ) ま たはハー ド ウ ェ ア ベース
の JTAG デバ ッ グのいずれかを使用 し て、 アプ リ ケーシ ョ ン コ ー ド をデバ ッ グで き ます。 ただ し 、
ソ フ ト ウ ェ ア ベース で ILMP BRAM の コ ー ド にデバ ッ グで き る のは、 BRAM メ モ リ コ ン ト ロ ー
ラ が LMB BRAM への書 き 込みを可能にす る よ う にデー タ 側の OPB バ ス に含まれてい る 場合のみ
です。
FSL コ ン フ ィ ギ ュ レ ーシ ョ ン
MicroBlaze は、 上記に記述 し たいずれの コ ン フ ィ ギ ュ レーシ ョ ンで も 、 FSL 入力 イ ン タ ーフ ェ イ
スお よ び出力 イ ン タ ーフ ェ イ ス を それぞれ最大 8 個ま でオプシ ョ ン で含め る こ と がで き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
41
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
MICROBLAZE PROCESSOR
r0
r1
r2
FSL0 FSL1 FSL2
IN FIFO
IN PORT
r3
r32
FSL7 FSL8
OUT FIFO
OUT PORT
図 2-9 : FSL コ ン フ ィ ギ ュ レーシ ョ ン + MicroBlaze
用途
MicroBlaze コ アか ら 直接その他のペ リ フ ェ ラ ル ま たはプ ロ セ ッ サに共有バ ス を使用せずにデー タ
を転送す る 場合に、 こ の コ ン フ ィ ギ ュ レ ーシ ョ ン を使用 し ます。 MicroBlaze には、 入力 FSL か ら
の読み出 し 、 出力 FSL への書 き 込みに対 し 数種の命令が含まれてい ます。 こ の読み出 し お よ び書 き
込み に は、 そ れ ぞ れ 2 ク ロ ッ ク サ イ ク ル必要 と な り ま す。 MicroBlaze に 含 め る FSL の 数は、
C_NUM_FSL パ ラ メ ー タ を使用 し て コ ン フ ィ ギ ュ レーシ ョ ン で き ます。
典型的な ア プ リ ケーシ ョ ン
FSL は、 ス ト リ ー ミ ン グ デー タ 型のア プ リ ケーシ ョ ン に特に有効です。 こ の タ イ プの アプ リ ケー
シ ョ ンには、 信号処理、 画像処理、 DSP、 お よ びネ ッ ト ワー ク 処理が含まれます。 FSL 通信チ ャ ネ
ルは、 リ コ ン フ ィ ギ ュ レーシ ョ ン可能な フ ァ ブ リ ッ ク に イ ンプ リ メ ン ト さ れてい る ハー ド ウ ェ ア ア
ク セ ラ レー タ と イ ン タ ーフ ェ イ スす る 場合に も 使用で き ます。
特徴
CPU ク ロ ッ ク の周期は、 MicroBlaze コ アへ FSL を追加 し て も 影響を受け ません。 MicroBlaze コ
アの こ の領域は、 FSL イ ン タ ーフ ェ イ ス の数に よ っ て多少拡大 し ます。
42
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
ビ ッ ト およびバイ ト の表記
ビ ッ ト およびバイ ト の表記
MicroBlaze のバ スは、 ビ ッ グ エンデ ィ ア ン命名規則を使用 し て表記 さ れます。 MicroBlaze のデー
タ タ イ プに対す る ビ ッ ト お よびバ イ ト の表記を次の図に示 し ます。
バイ ト ア ド レ ス
n
n+1
n+2
n+3
バイ ト 表記
0
1
2
3
バイ ト 順
MSByte
LSByte
31
ビ ッ ト 表現 0
ビ ッ ト 順 MSBit
LSBit
バイ ト ア ド レ ス
n
n+1
バイ ト 表記
0
1
バイ ト 順
MSByte
LSByte
LSBit
ビ ッ ト 順 MSBit
バイ ト ア ド レ ス
n
バイ ト 表記
0
ビ ッ ト 表現 0
ハー フ ワー ド
15
ビ ッ ト 表現 0
バイ ト 順
ワー ド
MSByte
バイ ト
7
ビ ッ ト 順 MSBit LSBit
図 2-10 : MicroBlaze ビ ッ グ エ ンデ ィ ア ン デー タ タ イ プ
コ ア I/O
MicroBlaze コ アでは、 命令フ ェ ッ チお よ びデー タ ア ク セ ス に対 し てそれぞれ I サ イ ド と D サ イ ド
と 示 さ れた別々のバ ス が イ ンプ リ メ ン ト さ れてい ます。 こ れ ら のバ スは、 次の 2 つのバ ス タ イ プに
分類 さ れます。
•
OPB ペ リ フ ェ ラ ルお よ び メ モ リ コ ン ト ロ ー ラ に対す る OPB V2.1 準拠バ ス
•
内部ブ ロ ッ ク RAM (BRAM) への高速ア ク セ ス にのみ使用す る ロ ーカル メ モ リ バ ス
コ アの I/O 信号すべて を、 表 2-2 に示 し ます。 OPB で始ま る ページ番号については、 IBM の 『64Bit On-Chip Peripheral Bus, Architectural Specifications, Version 2.0』 でそのページ を参照 し て く
だ さ い。
次の表に示 さ れてい る コ アの イ ン タ ーフ ェ イ スは、 次の よ う な定義です。
DOPB : デー タ イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス
DLMB : デー タ イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ)
IOPB : 命令 イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス
ILMB : 命令 イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ)
MFSL0..MFSL7 :FSL マ ス タ イ ン タ ーフ ェ イ ス
SFSL0..SFSL7 :FSL ス レーブ イ ン タ ーフ ェ イ ス
コ ア : その他の信号
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
43
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
表 2-2 : MicroBlaze コ ア I/O のサマ リ
インター
フ ェ イス
I/O
DM_ABus[0:31]
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB ア ド レ ス バ ス
OPB-11
DM_BE[0:3]
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB バ イ ト イ ネーブル
OPB-16
DM_busLock
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB バス ロ ッ ク
OPB-9
DM_DBus[0:31]
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB 書き 込みデー タ バ ス
OPB-13
DM_request
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB バス リ ク エ ス ト
OPB-8
DM_RNW
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB 読み出 し 、 書き 込みはな し
OPB-12
DM_select
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB セ レ ク ト
OPB-12
DM_seqAddr
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB シーケ ン シ ャ ル ア ド レ ス
OPB-13
DOPB_DBus[0:31]
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB 読み出 し デー タ バ ス
OPB-13
DOPB_errAck
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB エ ラ ー通知
OPB-15
DOPB_MGrant
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB バス許可
OPB-9
DOPB_retry
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB バス サ イ ク ル再試行
OPB-10
DOPB_timeout
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB タ イ ム ア ウ ト エ ラ ー
OPB-10
DOPB_xferAck
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB 転送通知
OPB-14
IM_ABus[0:31]
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB ア ド レ ス バス
OPB-11
IM_BE[0:3]
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB バ イ ト イ ネーブル
OPB-16
IM_busLock
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB バ ス ロ ッ ク
OPB-9
IM_DBus[0:31]
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB 書 き 込みデー タ バス
(常に 0x00000000)
OPB-13
IM_request
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB バ ス リ ク エ ス ト
OPB-8
IM_RNW
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB 読み出 し 、 書 き 込みはな し
(0 の ま ま )
OPB-12
IM_select
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB セ レ ク ト
OPB-12
IM_seqAddr
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB シーケ ン シ ャ ル ア ド レ ス
OPB-13
IOPB_DBus[0:31]
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB 読み出 し デー タ バス
OPB-13
IOPB_errAck
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB エ ラ ー通知
OPB-15
IOPB_MGrant
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB バ ス許可
OPB-9
IOPB_retry
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB バ ス サ イ ク ル再試行
OPB-10
IOPB_timeout
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB タ イ ム ア ウ ト エ ラ ー
OPB-10
IOPB_xferAck
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB 転送通知
OPB-12
Data_Addr[0:31]
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LB ア ド レ ス バ ス
48
Byte_Enable[0:3]
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LB バ イ ト イ ネーブル
48
Data_Write[0:31]
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LB 書き 込みデー タ バ ス
49
D_AS
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LB ア ド レ ス ス ト ロ ーブ
49
Read_Strobe
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LB 読み出 し ス ト ロ ーブ
49
信号
44
説明
www.xilinx.co.jp
ページ番号
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バスの構成
表 2-2 : MicroBlaze コ ア I/O のサマ リ (続き )
インター
フ ェ イス
I/O
Write_Strobe
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LB 書き 込みス ト ロ ーブ
49
Data_Read[0:31]
DLMB
I
デー タ イ ン タ ーフ ェ イ ス LB 読み出 し デー タ バ ス
49
DReady
DLMB
I
デー タ イ ン タ ーフ ェ イ ス LB デー タ ス ト ロ ーブ
49
Instr_Addr[0:31]
ILMB
O
命令 イ ン タ ーフ ェ イ ス LB ア ド レ ス バス
48
I_AS
ILMB
O
命令 イ ン タ ーフ ェ イ ス LB ア ド レ ス ス ト ロ ーブ
49
IFetch
ILMB
O
命令 イ ン タ ーフ ェ イ ス LB 命令フ ェ ッ チ
49
Instr[0:31]
ILMB
I
命令 イ ン タ ーフ ェ イ ス LB 読み出 し デー タ バス
49
IReady
ILMB
I
命令 イ ン タ ーフ ェ イ ス LB デー タ ス ト ロ ーブ
49
FSL0_M .. FSL7_M
MFSL
O
出力 FSL チ ャ ネルへのマ ス タ イ ン タ ーフ ェ イ ス
FSL0_S .. FSL7_S
SFSL
I
入力 FSL チ ャ ネルへの ス レーブ イ ン タ ーフ ェ イ ス
割 り 込み
コア
I
割 り 込み
リ セッ ト
コア
I
コア リ セッ ト
Clk
コア
I
クロック
Debug_Rst
コア
I
OPB JTAG UART か ら の リ セ ッ ト 信号
Ext_BRK
コア
I
OPB JTAG UART か ら の BREAK 信号
Ext_NM_BRK
コア
I
OPB JTAG UART か ら のマ ス ク 不可の BREAK 信号
Dbg_...
Core
IO
信号
説明
ページ番号
OPB MDM か ら のデバ ッ グ信号
バスの構成
OPB バス コ ン フ ィ ギ ュ レ ーシ ョ ン
MicroBlaze の OPB イ ン タ ーフ ェ イ スは、バ イ ト イ ネーブルが可能なマ ス タ と し て構成 さ れてい ま
す。 バ イ ト イ ネ ー ブ ル ア ー キ テ ク チ ャ は、 OPB V2.0 仕 様 の オ プ シ ョ ン の サ ブ セ ッ ト で、
MicroBlaze の よ う なオーバーヘ ッ ド の小 さ い FPGA イ ンプ リ メ ン テーシ ョ ンには理想的です。
OPB のデー タ バ ス イ ン タ ー コ ネ ク ト を図 2-11 に示 し ます。 マ ス タ と ブ リ ッ ジか ら の書 き 込みデー
タ バ ス は、 バ ス の OR ロ ジ ッ ク を介 し て ス レ ーブ と ブ リ ッ ジか ら の読み出 し デー タ バ ス と 分け ら
れてい ます。 最適化 さ れ る 場合は、 読み出 し ま たは書 き 込みバ ス に対す る OR ロ ジ ッ ク を完全に削
除で き ます。 オプシ ョ ンで、 読み出 し バ ス と 書 き 込みバ ス を OR で接続 し 、 OPB バ ス モニ タ に対
し て正 し い フ ァ ン ク シ ョ ン を作成す る こ と も で き ます。 命令側の OPB には、こ の イ ン タ ーフ ェ イ ス
がデー タ 側の OPB と 同 じ にな る よ う に、 書き 込みデー タ バ ス (0x00000000 に接続) お よび RNW
信号 ( ロ ジ ッ ク 1 に接続) が含まれてい る こ と に注意 し て く だ さ い。 こ れ ら の信号は定数で、 通常 イ
ンプ リ メ ン テーシ ョ ンで最適化 さ れて削除 さ れます。
図 2-12 に示す例では、 ブ リ ッ ジ 1 個の代わ り に複数のポー ト があ る ス レーブが 1 個使用 さ れてい
ます。 こ の ス レーブでは、IOPB と DOPB の両方に接続があ る 1 個の メ モ リ コ ン ト ロ ー ラ を表現で
き ます。 こ の場合、 バ ス のマルチプ レ ク サお よ び優先順位付けはス レーブで実行 さ れ る 必要があ り
ます。 こ のアプ ロ ーチで有利な点は、 命令側に別の I-to-D ブ リ ッ ジお よ び OPB アービ タ が不要な
点です。 た だし 、 ア ービ タ のフ ァ ン ク シ ョ ン は、 ス レ ーブ デバイ ス に含めら れて いる 必要があ り
ま す。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
45
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
デー タ 側 OPB
DOPB_ABus[0:31]
DOPB_BE[0:3]
DOPB_busLock
DOPB_wrDBus[0:31]
DOPB_RNW
DOPB_select
DOPB_seqAddr
DOPB_rdDBus[0:31]
DOPB_errAck
DOPB_retry
DOPB_timeout
DOPB_xferAck
DOPB_MGrant
OPB
ス レーブ 1
MicroBlaze
デー タ OPB
イン ター
フ ェ イス
(DOPB)
Sl1_rdDBus[0:31]
Sl1_errAck
Sl1_retry
Sl1_timeout
Sl1_toutSup
Sl1_xferAck
DM_ABus[0:31]
DM_BE[0:3]
DM_busLock
DM_wrDBus[0:31]
DM_RNW
DM_select
DM_seqAddr
DM_request
OR
DOPB_ABus[0:31]
DOPB_BE[0:3]
DOPB_busLock
DOPB_wrDBus[0:31]
DOPB_rdDBus[0:31]
DOPB_RNW
DOPB_select
DOPB_seqAddr
DOPB_errAck
DOPB_retry
DOPB_timeout
DOPB_toutSup
DOPB_xferAck
複数のマ ス タ が
存在する場合に必要
デー タ 側
OPB
アービ タ
バス モ ニ タ フ ァ ン ク シ ョ ン に提示
IOPB_rdDBus[0:31]
IOPB_errAck
IOPB_retry
IOPB_timeout
IOPB_toutSup
IOPB_xferAck
DOPB_ABus[0:31]
DOPB_BE[0:3]
DOPB_busLock
DOPB_wrDBus[0:31]
DOPB_RNW
DOPB_select
DOPB_seqAddr
Br1_MGrant
IOPB_rdDBus[0:31]
IOPB_errAck
IOPB_retry
IOPB_timeout
IOPB_xferAck
IOPB_MGrant
IOPB_ABus[0:31]
IOPB_BE[0:3]
IOPB_busLock
IOPB_wrDBus[0:31]
IOPB_RNW
IOPB_select
IOPB_seqAddr
DOPB
to
IOPB
ブリ ッジ
MicroBlaze
Instr OPB
イン ター
フ ェ イス
(IOPB)
Br1I_rdDBus[0:31]
Br1_errAck
Br1_retry
Br1_timeout
Br1_toutSup
Br1_xferAck
DOPB_wrDBus[0:31]
DOPB_rdDBus[0:31]
バス モ ニ タ フ ァ ン ク シ ョ ン に提示
IOPB_wrDBus[0:31]
IOPB_rdDBus[0:31]
Br1_ABus[0:31]
Br1_BE[0:3]
Br1_busLock
Br1D_wrDBus[0:31]
Br1_RNW
Br1_select
Br1_seqAddr
Br1_request
IM_ABus[0:31]
IM_BE[0:3]
IM_busLock
IM_wrDBus[0:31]
IM_RNW
IM_select
IM_seqAddr
IM_request
DOPB_DBus[0:31]
OR
OR
IOPB_DBus[0:31]
OR
IOPB_ABus[0:31]
IOPB_BE[0:3]
IOPB_busLock
IOPB_wrDBus[0:31]
IOPB_rdDBus[0:31]
IOPB_RNW
IOPB_select
IOPB_seqAddr
IOPB_errAck
IOPB_retry
IOPB_timeout
IOPB_toutSup
IOPB_xferAck
Required
命令側
OPB
ス レーブ 2
OPB
Sl2_rdDBus[0:31]
Sl2_errAck
Sl2_retry
Sl2_timeout
Sl2_toutSup
Sl2_xferAck
アービ タ
命令側 OPB
図 2-11 : OPB 接続 (読み出 し バス と 書き込みバスの分割)
46
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バスの構成
デー タ 側 OPB
DOPB_ABus[0:31]
DOPB_BE[0:3]
DOPB_busLock
DOPB_wrDBus[0:31]
DOPB_RNW
DOPB_select
DOPB_seqAddr
DOPB_rdDBus[0:31]
DOPB_errAck
DOPB_retry
DOPB_timeout
DOPB_xferAck
DOPB_MGrant
OPB
ス レーブ 1
MicroBlaze
デー タ OPB
イン ター
フ ェ イス
(DOPB)
Sl1_rdDBus[0:31]
Sl1_errAck
Sl1_retry
Sl1_timeout
Sl1_toutSup
Sl1_xferAck
DM_ABus[0:31]
DM_BE[0:3]
DM_busLock
DM_wrDBus[0:31]
DM_RNW
DM_select
DM_seqAddr
DM_request
OR
複数のマ ス タ が
存在する場合に必要
DOPB_ABus[0:31]
DOPB_BE[0:3]
DOPB_busLock
DOPB_wrDBus[0:31]
DOPB_rdDBus[0:31]
DOPB_RNW
DOPB_select
DOPB_seqAddr
DOPB_errAck
DOPB_retry
DOPB_timeout
DOPB_toutSup
DOPB_xferAck
デー タ 側
OPB
アービ タ
バス モ ニ タ フ ァ ン ク シ ョ ン に提示
DOPB_ABus[0:31]
DOPB_BE[0:3]
DOPB_busLock
DOPB_wrDBus[0:31]
DOPB_RNW
DOPB_select
DOPB_seqAddr
IOPB_ABus[0:31]
IOPB_BE[0:3]
IOPB_busLock
IOPB_wrDBus[0:31]
IOPB_RNW
IOPB_select
IOPB_seqAddr
IOPB_rdDBus[0:31]
IOPB_errAck
IOPB_retry
IOPB_timeout
IOPB_xferAck
IOPB_MGrant
OPB
ス レーブ 2
( 複数の
ポー ト )
MicroBlaze
Instr OPB
イン ター
フ ェ イス
(IOPB)
Sl2_rdDBus[0:31]
Sl2_errAck
Sl2_retry
Sl2_timeout
Sl2_toutSup
Sl2_xferAck
DOPB_wrDBus[0:31]
DOPB_rdDBus[0:31]
バス モ ニ タ フ ァ ン ク シ ョ ン に提示
IOPB_wrDBus[0:31]
IOPB_rdDBus[0:31]
Sl2_rdDBus[0:31]
Sl2_errAck
Sl2_retry
Sl2_timeout
Sl2_toutSup
Sl2_xferAck
IM_ABus[0:31]
IM_BE[0:3]
IM_busLock
OR
IM_RNW
IM_select
IM_seqAddr
IM_request
DOPB_DBus[0:31]
OR
IOPB_DBus[0:31]
OR
IOPB_ABus[0:31]
IOPB_BE[0:3]
IOPB_busLock
IOPB_wrDBus[0:31]
IOPB_rdDBus[0:31]
IOPB_RNW
IOPB_select
IOPB_seqAddr
IOPB_errAck
IOPB_retry
IOPB_timeout
IOPB_toutSup
IOPB_xferAck
命令側 OPB
図 2-12 : OPB 接続 ( ブ リ ッ ジの代わ り に複数のポー ト がある ス レーブ を使用)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
47
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
LMB ( ロー カル メ モ リ バス ) の定義
ロ ーカル メ モ リ バ ス (LMB) は、 主 と し てオ ンチ ッ プ ブ ロ ッ ク RAM にア ク セ スす る のに使用す
る 同期バ ス です。 こ のバ ス では、 最小数の制御信号 と 単純なプ ロ ト コ ルを 1 個使用 し て、 ロ ーカル
ブ ロ ッ ク RAM に 1 ク ロ ッ ク サ イ ク ルでア ク セ ス で き ます。 LMB の信号 と その定義を次の表に示
し ます。 LMB 信号はすべてア ク テ ィ ブ High です。
表 2-3 : 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
書 き 込み中
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-4 : 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
48
1100
x
x
1111
x
x
www.xilinx.co.jp
x
x
x
x
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バスの構成
Data_Write[0:31]
書 き 込みデー タ バ ス は コ アの出力で、 メ モ リ に書 き 込まれ る デー タ が含まれてい ます。 こ のバ スは
AS が High の と き に有効にな り 、 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク ルで無効にな
り ます。 Byte_Enable[0:3] で指定 さ れ る バ イ ト レーンにのみ有効なデー タ が含まれてい ます。
AS
ア ド レ ス ス ト ロ ーブは コ アの出力で、 転送の開始を示 し 、 ま た ア ド レ ス バ ス お よ びバ イ ト イ ネー
ブルを保障 し ます。 こ の ス ト ロ ーブは、 転送の最初の ク ロ ッ ク サ イ ク ルでのみ High にな り 、 その
後は次の転送の開始ま で Low の ま ま にな り ます。
Read_Strobe
読み出 し ス ト ロ ーブは コ アの出力で、 読み出 し 転送が進行中であ る こ と を示 し ま す。 こ の信号は、
転送の最初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た後のの ク ロ ッ ク サ イ
ク ルま で High の ま ま にな り ます。 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク ルで次の読み
出 し 転送が開始 さ れ る 場合は、 Read_Strobe は High の ま ま にな り ます。
Write_Strobe
書 き 込み ス ト ロ ーブは コ アの出力で、 書 き 込み転送が進行中であ る こ と を示 し ま す。 こ の信号は、
転送の最初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク
ルま で High の ま ま にな り ます。 Ready 信号が 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 コ アの ク ロ ッ ク に同期 し てい ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
49
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
LMB ( ロー カル メ モ リ バス ) の動作
次に LMB バ ス の動作の例を示 し ます。
一般的な書き込み動作
Clk
Addr
A0
Byte_Enable
1111
Data_Write
D0
AS
Read_Strobe
Write_Strobe
Data_Read
Ready
図 2-13 : LMB での一般的な書き込み動作
一般的な読み出 し 動作
Clk
Addr
A0
Byte_Enable
1111
Data_Write
AS
Read_Strobe
Write_Strobe
Data_Read
D0
Ready
図 2-14 : LMB の一般的な読み出 し 動作
50
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バスの構成
連続書き込み動作 (典型的な LMB ア ク セス : 書き込みにつ き 2 ク ロ ッ ク )
Clk
Addr
A0
A1
Byte_Enable
BE0
BE1
Data_Write
D0
D1
AS
Read_Strobe
Write_Strobe
Data_Read
Ready
図 2-15 : LMB での連続書き込み動作
1 サイ ク ルの連続読み出 し 動作 (典型的な命令側ア ク セス - 読み出 し につ き
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-16 : LMB での 1 サイ ク ルの連続読み出 し 動作
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
51
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
読み出 し /書き込み混合の連続動作 (典型的なデー タ 側の タ イ ミ ン グ )
Clk
Addr
A0
A1
Byte_Enable
BE0
BE1
Data_Write
D0
AS
Read_Strobe
Write_Strobe
Data_Read
D1
Ready
図 2-17 : 読み出 し /書き込み混合の連続動作
デー タ の読み出 し および書き込み操作
MicroBlaze のデー タ 側のバ ス イ ン タ ーフ ェ イ ス では、 次の転送を サポー ト す る のに必要 と な る 読
み出 し 操作お よ び書 き 込み操作が実行 さ れます。
•
ワ ー ド デバ イ スへのバ イ ト 、 ハーフ ワー ド 、 ワー ド 転送
•
ハーフ ワ ー ド デバ イ スへのバ イ ト 、 ハーフ ワー ド 転送
•
バ イ ト デバ イ スへのバ イ ト 転送
MicroBlaze では指定デバ イ ス の転送サ イ ズ を超え る 転送はサポー ト さ れてい ま せん。 こ の よ う な
種類の転送では、 MicroBlaze バス イ ン タ ーフ ェ イ ス ではサポー ト さ れていないダ イ ナ ミ ッ ク バ ス
サ イ ジ ン グお よ び変換サ イ ク ルが必要 と な り ます。 読み出 し サ イ ク ルに対す る デー タ 操作を表 2-5
に、 書 き 込みサ イ ク ルに対す る デー タ 操作を表 2-6 に示 し ます。
表 2-5 : 読み出 し デー タ の操作 (Register 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
ア ド レス
52
rD[0:7]
Byte0
www.xilinx.co.jp
rD[8:15]
Byte1
rD[16:23]
rD[24:31]
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
バスの構成
表 2-6 : 書き込みデー タ の操作 (Register rD か らの格納)
書き込みデー タ バスのバイ ト
[30:31]
Byte_Enable
[0:3]
転送サイ ズ
11
0001
バイ ト
10
0010
バイ ト
01
0100
バイ ト
00
1000
バイ ト
10
0011
ハーフ ワー ド
00
1100
ハーフ ワー ド
rD[16:23]
rD[24:31]
00
1111
ワー ド
rD[0:7]
rD[8:15]
ア ド レス
Byte0
Byte1
Byte2
Byte3
rD[24:31]
rD[24:31]
rD[24:31]
rD[24:31]
rD[16:23]
rD[24:31]
rD[16:23]
rD[24:31]
その他の OPB マ ス タ では、MicroBlaze で許容 さ れ る バ イ ト レーン配置での必須条件に比べて制限
が多い場合があ り ます。 OPB の ス レーブ デバ イ ス は、 通常最上位のバ イ ト レーンに付け ら れてい
る バ イ ト デバ イ スお よ び最上位のハーフ ワ ー ド レーンに付け ら れてい る ハーフ ワ ー ド のデバ イ ス
と 共に左揃えで付け ら れてい ます。 MicroBlaze の操作 ロ ジ ッ ク では、 こ の接続方法が完全にサポー
ト さ れてい ます。
FSL (高速シ ン プ レ ッ ク ス リ ン ク ) バスの動作
FSL は、 SRL16 プ リ ミ テ ィ ブを使用 し た FIFO と し て FPGA に イ ンプ リ メ ン ト さ れます。 FSL バ
ス では、出力 FIFO と 入力 FIFO 間のポ イ ン ト ツー ポ イ ン ト 通信が可能です。 FSL バ ス の詳細につ
いては、 FSL バ ス のマニ ュ アルを参照 し て く だ さ い。
MicroBlaze 上のマ ス タ FSL 信号
MicroBlaze では、 最大 8 個ま でのマ ス タ FSL イ ン タ ーフ ェ イ ス を持つ こ と がで き ます。 マ ス タ 信
号を表 2-7 に示 し ます。
表 2-7 : マス タ FSL 信号
信号名
説明
VHDL の種類
方向
FSLn_M_Clk
クロック
std_logic
出力
FSLn_M_Write
セ ッ ト 時に FIFO への書 き 込み
を イ ネーブルにする ラ イ ト 信号
std_logic
出力
FSLn_M_Data
入力デー タ
std_logic_vector
出力
FSLn_M_CONTROL
FSLn_IN_DATA が制御ワ ー ド
std_logic
出力
std_logic
入力
であ る こ と を示す制御ビ ッ ト
FSLn_M_FULL
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
入力 FIFO が フルであ る こ と を
示すフル ビ ッ ト
www.xilinx.co.jp
53
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
MicroBlaze 上のス レ ーブ FSL 信号
MicroBlaze では、 最大 8 個ま での ス レーブ FSL イ ン タ ーフ ェ イ ス を持つ こ と がで き ます。 ス レー
ブ FSL イ ン タ ーフ ェ イ ス信号を表 2-8 に示 し ます。
表 2-8 : ス レーブ FSL 信号
信号名
説明
VHDL の種類
方向
FSLn_S_Clk
クロック
std_logic
出力
FSLn_S_Read
次に読み出 し 可能な入力を リ ク
エ ス ト す る リ ー ド 信号
std_logic
出力
FSLn_S_Data
出力デー タ
std_logic_vector
入力
FSLn_S_Control
FSLn_OUT_DATA が制御ワ ー
std_logic
入力
std_logic
入力
ド であ る こ と を示す制御ビ ッ ト
FSLn_S_Exists
デー タ が入力 FIFO に存在す る
こ と を示すビ ッ ト
FSL バス書き込み操作
FSL_CLK
FSL_M_DATA
D0
D1
FSL_M_CONTROL
C0
C1
FSL_M_WRITE
FSL_M_FULL
FIFO_DATA
D0
D1/D0
FIFO_CONTROL
C0
C1/C0
図 2-18 : FSL での連続書き込み動作
FSL バ ス への書 き 込みは、 FSL_M_Write 信号で制御 さ れ ま す。 FSL_M_Write が現在の ク ロ ッ ク
エ ッ ジ で 1 に 設 定 さ れ て い る 場合、 デ ー タ 信号 お よ び制 御信 号 で あ る FSL_M_Data お よ び
FSL_M_Control は、 次の ク ロ ッ ク の立ち上が り エ ッ ジで FSL FIFO に送 ら れます。 図 2-18 に示す
タ イ ミ ン グ図に、 FSL バ ス での連続書 き 込み動作を示 し ます。 FIFO_Data お よ び FIFO_Control 信
号は、 FSL FIFO のデー タ 信号お よ び制御信号を示 し ます。 FSL FIFO が フルの場合、 FSL_M_Full
信号は 1 に設定 さ れます。
54
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
デバ ッ グ イ ン タ ー フ ェ イ ス
FSL バス読み出 し 操作
FIFO の読み出 し の最後には、 読み出 さ れていないデー タ 信号お よ び制御信号であ る 、 FSL_S_Data
お よ び FSL_S_Control が含ま れ ます。 FIFO が空の場合、 FSL_S_Exists 信号は 0 に設定 さ れ、 そ
れ以外の場合は 1 に設定 さ れます。 ス レーブ側の FSL ペ リ フ ェ ラ ルで、デー タ の読み出 し が完了す
る と 、FSL_S_Read 信号は 1 ク ロ ッ ク サ イ ク ル間 1 に設定 さ れ る 必要があ り ます。 デー タ お よ び制
御値は、 FIFO の上位か ら 押 し 出 さ れます。 タ イ ミ ン グ図については図 2-19 を参照 し て く だ さ い。
FSL_CLK
FIFO_DATA
D1/D0
D1
FIFO_CONTROL
C1/C0
C1
FSL_S_DATA
D0
D1
FSL_S_CONTROL
C0
C1
FSL_S_READ
FSL_S_EXISTS
図 2-19 : FSL での連続読み出 し 動作
デバ ッ グ イ ン タ ー フ ェ イ ス
MicroBlaze のデバ ッ グ イ ン タ ーフ ェ イ スは、 ザ イ リ ン ク ス FPGA の JTAG ポー ト と イ ン タ ーフ ェ
イ スす る 、 ザ イ リ ン ク ス のマ イ ク ロ プ ロ セ ッ サ デバ ッ グ モジ ュ ール (MDM) IP コ ア と 共に機能す
る よ う に設計 さ れてい ます。 外部の ソ フ ト ウ ェ ア デバ ッ グ ツールでは、 MDM コ ア と MicroBlaze
のデバ ッ グ ポー ト を使用 し て MicroBlaze を制御で き ま す。 MDM では、 MicroBlaze の複数のデ
バ ッ グ ポー ト への接続がサポー ト さ れてい ます。 MicroBlaze のデバ ッ グ信号を表 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
入力
イ ネーブル
Dbg_Capture
MDM か ら の JTAG BSCAN
キ ャ プチ ャ 信号
Dbg_Update
MDM か ら の JTAG BSCAN
ア ッ プデー ト 信号
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
55
R
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
イ ン プ リ メ ン テーシ ョ ン
パ ラ メ ー タ の設定
MicroBlaze の次のパ ラ メ ー タ は、 設定可能です。
•
デー タ イ ン ターフ ェ イ ス オプシ ョ ン : OPB のみ、 LMB+OPB
•
命令 イ ン タ ーフ ェ イ ス オプシ ョ ン : LMB のみ、 LMB+OPB、 OPB のみ
•
バレ ル シ フ タ
•
FSL イ ン タ ーフ ェ イ ス の数 (入力 と 出力に対 し て同数)
•
割 り 込みポー ト
•
デバ ッ グ ポー ト
•
命令キ ャ ッ シ ュ
•
デー タ キ ャ ッ シ ュ
表 2-10 : MPD パラ メ ー タ
機能/説明
パラ メ ータ名
許容値
デ フ ォル ト
値
VHDL の
種類
ターゲ ッ ト フ ァ ミ リ
C_FAMILY
ザ イ リ ン ク ス FPGA
ファ ミ リ
virtex2
文字列
デー タ サ イ ズ
C_DATA_SIZE
32
32
整数
イ ン ス タ ン ス名
C_INSTANCE
任意の イ ン ス タ ン ス名
microblaze
文字列
デー タ側 OPB イ ン タ ーフ ェ イ ス
C_D_OPB
0, 1
1
整数
データ 側 LMB イ ン タ ーフ ェ イ ス
C_D_LMB
0, 1
1
整数
命令側 OPB イ ン タ ーフ ェ イ ス
C_I_OPB
0, 1
1
整数
命令側 LMB イ ン タ ーフ ェ イ ス
C_I_LMB
0, 1
1
整数
バ レル シ フ タ
C_USE_BARREL
0, 1
0
整数
除算ユニ ッ ト
C_USE_DIV
0, 1
0
整数
FSL イ ン タ ーフ ェ イ ス の数
C_FSL_LINKS
0..8
0
整数
FSL のデー タ バス サ イ ズ
C_FSL_DATA_SIZE
32
32
整数
レベル/エ ッ ジ割 り 込み
C_INTERRUPT_IS_EDGE
0, 1
0
整数
ネガテ ィ ブ/ポジテ ィ ブ エ ッ ジ
割 り 込み
C_EDGE_IS_POSITIVE
0, 1
1
整数
MDM デバ ッ グ イ ン タ ー
C_DEBUG_ENABLED
0,1
0
整数
ハー ド ウ ェ ア ブ レー ク
ポイン ト数
C_NUMBER_OF_PC_BRK
0-8
1
整数
読み出 し ア ド レ ス ウ ォ ッ チ
ポイン ト数
C_NUMBER_OF_RD_ADDR_BRK
0-4
0
整数
フェイス
56
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
イ ン プ リ メ ン テーシ ョ ン
表 2-10 : MPD パラ メ ー タ (続き )
機能/説明
パラ メ ータ名
許容値
デ フ ォル ト
値
VHDL の
種類
書 き 込みア ド レ ス ウ ォ ッ チ
ポイン ト数
C_NUMBER_OF_WR_ADDR_BRK
0-4
0
整数
命令キ ャ ッ シ ュ
C_USE_ICACHE
0,1
0
整数
命令キ ャ ッ シ ュ ア ド レ ス タ グ
C_ADDR_TAG_BITS
0-24
7
整数
命令キ ャ ッ シ ュ サ イ ズ
C_CACHE_BYTE_SIZE
512,1024,2048,4096,8
192,16384,32768,655
36
8192
整数
命令キ ャ ッ シ ュ ベース ア ド レ ス
C_ICACHE_BASEADDR
X"00000000" X"FFFFFFFF"
X"000000
00"
std_logic
_vector
命令キ ャ ッ シ ュ ハ イ ア ド レ ス
C_ICACHE_HIGHADDR
X"00000000" X"FFFFFFFF"
X"3FFFFF
FF"
std_logic
_vector
命令キ ャ ッ シ ュ 書 き 込み
イ ネーブル
C_ALLOW_ICACHE_WR
0,1
1
整数
デー タ キ ャ ッ シ ュ
C_USE_DCACHE
0,1
0
整数
デー タ キ ャ ッ シ ュ ア ド レ ス
タグ
C_DCACHE_ADDR_TAG
0-24
7
整数
デー タ キ ャ ッ シ ュ サ イ ズ
C_DCACHE_BYTE_SIZE
512,1024,2048,4096,8
192,16384,32768,655
36
8192
整数
デー タ キ ャ ッ シ ュ ベース
アド レス
C_DCACHE_BASEADDR
X"00000000" X"FFFFFFFF"
X"000000
00"
std_logic
_vector
デー タ キ ャ ッ シ ュ ハ イ
アド レス
C_DCACHE_HIGHADDR
X"00000000" X"FFFFFFFF"
X"3FFFFF
FF"
std_logic
_vector
デー タ キ ャ ッ シ ュ 書 き 込み
イ ネーブル
C_ALLOW_DCACHE_WR
0,1
1
整数
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
57
R
58
第 2 章 : MicroBlaze バス イ ン タ ー フ ェ イ ス
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
第3章
MicroBlaze エ ンデ ィ ア ン
こ の章では、 ビ ッ グ エンデ ィ ア ンお よ び リ ト ル エンデ ィ ア ンのデー タ オブジ ェ ク ト お よ び リ ト ル
エ ンデ ィ ア ン のデー タ を ビ ッ グ エ ンデ ィ ア ン の MicroBlaze ソ フ ト プ ロ セ ッ サで使用す る 方法に
ついて説明 し ます。 こ の章には、 次のセ ク シ ョ ンが含まれてい ます。
•
「定義」
•
「ビ ッ ト の命名規則」
•
「デー タ タ イ プお よ びエンデ ィ ア ン」
•
「VHDL の例」
定義
デー タ は、 バ イ ト 、 ハーフ ワ ー ド 、 ワー ド 、 ま たはダブル ワ ー ド で メ モ リ に格納 さ れ る か、 ま たは
メ モ リ か ら 取 り 出 さ れます。 エンデ ィ ア ンは、 デー タ が格納、 取得 さ れ る と き の順序について言及
し てい ます。 リ ト ル エンデ ィ ア ンでは、最下位バ イ ト が最下位のバ イ ト ア ド レ ス に割 り 当て ら れま
す。 ビ ッ グ エンデ ィ ア ンでは、 最上位バ イ ト が最下位のバ イ ト ア ド レ ス に割 り 当て ら れます。
メ モ : エンデ ィ ア ンは、 単一のバ イ ト デー タ には影響を与え ません。
ビ ッ ト の命名規則
MicroBlaze アーキ テ ク チ ャ では、 バ スお よ びレ ジ ス タ ビ ッ ト の命名規則を使用 し ます。 こ の命名
規則では、 最上位ビ ッ ト (MSB) 名が 0 と な り ます。 ビ ッ ト 順が LSB に近づ く ほ ど、 ビ ッ ト 名の数
値は増加 し 、 32 ビ ッ ト ベ ク タ の LSB 名は 31 にな り ます。 PCI コ アの よ う なその他のザ イ リ ン ク
ス イ ン ターフ ェ イ ス では、 逆の命名規則が使用 さ れ、 LSB 名は 0 と な り ます。
デー タ タ イ プお よびエ ンデ ィ ア ン
MicroBlaze に対 し ハー ド ウ ェ アでサポー ト さ れ る デー タ タ イ プは、 ワ ー ド 、 ハーフ ワ ー ド 、 お よ
びバ イ ト です。 各デー タ タ イ プに対する デー タ 構成を次の表に示 し ます。
表 3-1 : ワー ド デー タ タ イ プ
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
バイ ト ア ド レ ス
n
n+1
n+2
n+3
バ イ ト 表記
0
1
2
3
バイ ト 順
MSByte
LSByte
ビ ッ ト 表現
0
31
ビッ ト順
MSBit
LSBit
www.xilinx.co.jp
59
R
第 3 章 : MicroBlaze エ ンデ ィ ア ン
表 3-2 : ハー フ ワー ド デー タ タ イ プ
バイ ト ア ド レ ス
n
n+1
バ イ ト 表記
0
1
バイ ト 順
MSByte
LSByte
ビ ッ ト 表現
0
15
ビッ ト順
MSBit
LSBit
表 3-3 : バイ ト デー タ タ イ プ
バイ ト ア ド レ ス
n
バ イ ト 表記
0
バイ ト 順
MSByte
ビ ッ ト 表現
0
7
ビッ ト順
MSBit
LSBit
次の C 言語構造体には、 多種の ス カ ラ と 文字列が含まれてい ます。 コ メ ン ト には、 各構造体エ レ メ
ン ト に含まれ る 値が示 さ れてい ます。 こ れ ら の値は、 各構造体エ レ メ ン ト を構成す る バ イ ト が ど の
よ う に ス ト レージにマ ッ プ さ れ る かを示 し てい ます。
struct {
int a; /* 0x1112_1314 word */
long long b; /* 0x2122_2324_2526_2728 double word */
char *c; /* 0x3132_3334 word */
char d[7]; /* 'A','B','C','D','E','F','G' array of bytes */
short e; /* 0x5152 halfword */
int f; /* 0x6162_6364 word */
} s;
C 言語構造体のマ ッ プ規則では、 ス カ ラ を希望の境界で揃え る ためにパデ ィ ン グ (バ イ ト の ス キ ッ
プ) が許容 さ れます。 こ の構造体マ ッ プの例では、 各ス カ ラ が自然境界で揃え ら れてい ます。 こ のア
ラ イ メ ン ト では、 a と b の間に 4 バ イ ト 、 d と e の間に 1 バ イ ト 、 e と f の間に 2 バ イ ト のパデ ィ
ン グが使用 さ れてい ます。 パデ ィ ン グの量は、ビ ッ グ エンデ ィ ア ン と リ ト ル エンデ ィ ア ンのマ ッ プ
で同等 と な り ます。
メ モ : MicroBlaze コ アでは、 ALU お よ び GPR に含まれ る オペ ラ ン ド お よびパ イ プ ラ イ ン命令は、
すべて ビ ッ グ エンデ ィ ア ンです。
次の表に、 ビ ッ グ エンデ ィ ア ン形式の構造体マ ッ プを示 し ます。 (デー タ は、 構造体マ ッ プでハ イ ラ
イ ト さ れ ます。 ) ア ド レ ス に格納 さ れ る デー タ の下には、 16 進数のア ド レ ス が記述 さ れてい ます。
各バ イ ト の内容は、 こ の構造体で定義 さ れてい る よ う に、 数値 (16 進数) お よ び文字列 (文字列エ レ
メ ン ト に対 し ) と し て示 さ れます。
60
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
デー タ タ イ プおよびエ ンデ ィ ア ン
表 3-4 : ビ ッ グ エ ンデ ィ ア ン形式のマ ッ プ
11
12
13
14
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
21
22
23
24
25
26
27
28
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
31
32
33
34
'A'
'B'
'C'
'D'
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
'E'
'F'
'G'
51
52
0x18
0x19
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
61
62
63
64
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
表 3-5 : リ ト ル エ ンデ ィ ア ン形式のマ ッ プ
14
13
12
11
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
28
27
26
25
24
23
22
21
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
34
33
32
31
'A'
'B'
'C'
'D'
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
'E'
'F'
'G
52
51
0x18
0x19
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
64
63
62
61
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
61
R
第 3 章 : MicroBlaze エ ンデ ィ ア ン
VHDL の例
BRAM - LMB の例
LMB では、 ビ ッ グ エンデ ィ ア ン形式のバ イ ト ア ド レ ス指定が使用 さ れ、 BRAM では リ ト ル エン
デ ィ ア ン形式のバ イ ト ア ド レ ス指定が使用 さ れ ます。 こ の 2 つのバ ス間のデー タ を変換す る には、
デー タ と ア ド レ ス バ イ ト を ス ワ ッ プ し ます。
BRAM と MicroBlaze 間のイ ン タ ー フ ェ イ ス
entity Local_Memory is
port (
Clk
: in std_logic;
Reset : in boolean;
-- Instruction Bus
Instr_Addr : in std_logic_vector(0 to 31);
Instr
: out std_logic_vector(0 to 31);
IFetch
: in std_logic;
I_AS
: in std_logic;
IReady
: out std_logic;
-- ports to "Decode_I"
Data_Addr
: in std_logic_vector(0
Data_Read
: out std_logic_vector(0
Data_Write
: in std_logic_vector(0
D_AS
: in std_logic;
Read_Strobe : in std_logic;
Write_Strobe : in std_logic;
DReady
: out std_logic;
Byte_Enable : in std_logic_vector(0
);
to 31);
to 31);
to 31);
to 3)
end Local_Memory;
architecture IMP of Local_Memory is
BRAM Component Declaration (little-endian)
component mem_dp_0 is
port (
addra : in std_logic_vector(9
addrb : in std_logic_vector(9
clka : in std_logic;
clkb : in std_logic;
dinb : in std_logic_vector(7
douta : out std_logic_vector(7
doutb : out std_logic_vector(7
web
: in std_logic);
end component mem_dp_0;
62
www.xilinx.co.jp
downto 0);
downto 0);
downto 0);
downto 0);
downto 0);
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
VHDL の例
Swap BRAM Little-endian Data to Big-endian
Swap_BE_and_LE_order : process (....)
begin
for I in addra'range loop
addra(I) <= Instr_Addr(29-I);
end loop;
for I in addrb'range loop
addrb(I) <= Data_Addr(29-I);
end loop;
for I in 0 to 3 loop
for J in 0 to 7 loop
dinb(I*8+J) <= Data_Write((3-I)*8+(7-J));
Instr((3-I)*8+(7-J)) <= douta(I*8+J);
Data_Read((3-I)*8+(7-J)) <= doutb(I*8+J);
end loop;
end loop;
end process Swap_BE_and_LE_order;
BRAM Instantiation
mem_dp_0_I : mem_dp_0
port map (
addra=>addra,
--[IN std_logic_VECTOR(9 downto 0)]
addrb=>addrb,
--[IN std_logic_VECTOR(9 downto 0)]
clka=>Clk,
--[IN std_logic]
clkb=>Clk,
--[IN std_logic]
dinb=>dinb(31 downto 24)--[IN std_logic_VECTOR(7 downto 0)]
douta=>douta(31 downto 24), --[OUT std_logic_VECTOR(7 downto 0)]
doutb => doutb(31 downto 24), --[OUT std_logic_VECTOR(7 downto 0)]
web=>we(0));
--[IN std_logic]
BRAM - OPB の例
OPB では、 ビ ッ グ エンデ ィ ア ン形式のバ イ ト ア ド レ ス指定が使用 さ れ、 BRAM では リ ト ル エン
デ ィ ア ン形式のバ イ ト ア ド レ ス指定が使用 さ れ ます。 こ の 2 つのバ ス間のデー タ を変換す る には、
デー タ と ア ド レ ス バ イ ト を ス ワ ッ プ し ます。
BRAM と MicroBlaze 間のイ ン タ ー フ ェ イ ス
library IEEE;
use IEEE.std_logic_1164.all;
entity OPB_BRAM is
generic (
C_BASEADDR : std_logic_vector(0 to 31) := X"B000_0000";
C_NO_BRAMS : natural
:= 4; -- Can be 4,8,16,32 only
C_VIRTEXII
: boolean
:= true
);
port (
-- Global signals
OPB_Clk : in std_logic;
OPB_Rst : in std_logic;
-- OPB signals
OPB_ABus
: in std_logic_vector(0 to 31);
OPB_BE
: in std_logic_vector(0 to 3);
OPB_RNW
: in std_logic;
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
63
R
第 3 章 : MicroBlaze エ ンデ ィ ア ン
OPB_select : in std_logic;
OPB_seqAddr : in std_logic;
OPB_DBus
: in std_logic_vector(0 to 31);
OPB_BRAM_DBus
OPB_BRAM_errAck
OPB_BRAM_retry
OPB_BRAM_toutSup
OPB_BRAM_xferAck
:
:
:
:
:
out
out
out
out
out
std_logic_vector(0 to 31);
std_logic;
std_logic;
std_logic;
std_logic;
-- OPB_BRAM signals (other port)
BRAM_Clk
: in std_logic;
BRAM_Addr
: in std_logic_vector(0
BRAM_WE
: in std_logic_vector(0
BRAM_Write_Data : in std_logic_vector(0
BRAM_Read_Data : out std_logic_vector(0
);
to
to
to
to
31);
3);
31);
31)
end entity OPB_BRAM;
architecture IMP of OPB_BRAM is
BRAM Component Declaration (little-endian)
component RAMB16_S9_S9
port (
DIA
: in std_logic_vector (7 downto 0);
DIB
: in std_logic_vector (7 downto 0);
DIPA : in std_logic_vector (0 downto 0);
DIPB : in std_logic_vector (0 downto 0);
ENA
: in std_ulogic;
ENB
: in std_ulogic;
WEA
: in std_ulogic;
WEB : in std_ulogic;
SSRA : in std_ulogic;
SSRB : in std_ulogic;
CLKA : in std_ulogic;
CLKB : in std_ulogic;
ADDRA : in std_logic_vector (10 downto 0);
ADDRB : in std_logic_vector (10 downto 0);
DOA
: out std_logic_vector (7 downto 0);
DOB
: out std_logic_vector (7 downto 0);
DOPA : out std_logic_vector (0 downto 0);
DOPB : out std_logic_vector (0 downto 0) );
end component;
Swap BRAM Little-endian Data to Big-endian
BE_to_LE : for I in 0 to 31 generate
opb_dbus_le(I )
<= OPB_DBus(31-I);
bram_write_data_le(I) <= BRAM_Write_Data(31-I);
BRAM_Read_Data(I)
<= bram_Read_Data_LE(31-I);
opb_ABus_LE(I)
<= OPB_ABus(31-I);
bram_Addr_LE(I)
<= BRAM_Addr(31-I);
end generate BE_to_LE;
64
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
VHDL の例
BRAM Instantiation
All_Brams : for I in 0 to C_NO_BRAMS-1 generate
By_8 : if (C_NO_BRAMS = 4) generate
RAMB16_S9_S9_I : RAMB16_S9_S9
port map (
DIA => opb_DBUS_LE(((I+1)*8-1) downto I*8), --[in std_logic_vector(7
downto 0)]
DIB =>bram_Write_Data_LE(((I+1)*8)-1 downto I*8), --[in
std_logic_vector (downto 0)]
DIPA => null_1,
-- [in std_logic_vector (7 downto 0)]
DIPB => null_1,
-- [in std_logic_vector (7 downto 0)]
ENA
=> '1',
-- [in std_ulogic]
ENB
=> '1',
-- [in std_ulogic]
WEA
=> opb_WE(I),
-- [in std_ulogic]
WEB
=> BRAM_WE(I),
-- [in std_ulogic]
SSRA => '0',
-- [in std_ulogic]
SSRB => '0',
-- [in std_ulogic]
CLKA => OPB_Clk,
-- [in std_ulogic]
CLKB => BRAM_Clk,
-- [in std_ulogic]
ADDRA => opb_ABus_LE(12 downto 2), -- [in std_logic_vector (10 downto
0)]
ADDRB => bram_Addr_LE(12 downto 2), -- [in std_logic_vector (10 downto
0)]
DOA=>opb_BRAM_DBus_LE_I(((I+1)*8-1)downto I*8),--[out
std_logic_vector(7 downto 0)]
DOB =>bram_Read_Data_LE(((I+1)*8-1) downto I*8),--[out
std_logic_vector(7 downto 0)]
DOPA => open,
-- [out std_logic_vector (0 downto 0)]
DOPB => open);
-- [out std_logic_vector (0 downto 0)]
end generate By_8;
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
65
R
66
第 3 章 : MicroBlaze エ ンデ ィ ア ン
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
第4章
MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ
イ ン タ ー フ ェ イ ス (ABI)
サマ リ
こ の章では、 ソ フ ト プ ロ セ ッ サ に対 し て ア セ ン ブ リ 言語で ソ フ ト ウ ェ ア を 開発す る 上で重要な
MicroBlaze の ア プ リ ケ ー シ ョ ン バ イ ナ リ イ ン タ ー フ ェ イ ス (ABI) に つ い て 説 明 し ま す。
MicroBlaze の GNU コ ンパ イ ラ は、こ の章に記述 さ れてい る 規則に従い ます。 つま り アセ ンブ リ プ
ロ グ ラ マで記述 さ れ る コ ー ド も 、 コ ンパ イ ラ で生成 さ れ る コ ー ド に準拠す る ために同様の規則に従
う 必要があ り ます。 割 り 込みお よ び例外処理について も 、 こ の章で簡単に説明 し ます。
デー タ タ イ プ
MicroBlaze ア セ ン ブ リ プ ロ グ ラ ム で使用 さ れ る デー タ タ イ プ を、 表 4-1 に示 し ま す。 data8、
data16、 お よ び data32 の よ う なデー タ タ イ プは、 通常のバ イ ト 、 ハーフ バ イ ト 、 お よ び ワ ー ド で
使用 さ れます。
表 4-1 : MicroBlaze アセ ン ブ リ プ ログ ラ ムでのデー タ タ イ プ
MicroBlaze のデー タ タ イ プ
( アセ ン ブ リ プ ログ ラ ム用)
対応する ANSI C
デー タ タ イ プ
サイ ズ (バイ ト )
data8
char
1
data16
short
2
data32
int
4
data32
long int
4
data32
enum
4
data16/data32
pointera
2/4
a. グ ロ ーバル ポ イ ン タ でア ク セ ス可能な ス モール デー タ 領域へのポ イ ン タ は、
deta16 です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
67
R
第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
レ ジ ス タ の使用規則
MicroBlaze に対す る レ ジ ス タ の使用規則を表 4-2 に示 し ます。
表 4-2 : レ ジ ス タ の使用規則
レジス タ
タ イプ
用途
R0
専用
値0
R1
専用
ス タ ッ ク ポインタ
R2
専用
読み出 し 専用の ス モール デー タ 領域ア ン カー
R3 ~ R4
揮発性
戻り値
R5 ~ R10
揮発性
パ ラ メ ー タ の引渡 し /一時保存
R11 ~ R12
揮発性
一時保存
R13
専用
読み出 し /書 き 込みの ス モール デー タ 領域ア ン カー
R14
専用
割 り 込みの戻 り ア ド レ ス
R15
専用
サブルーチンの戻 り ア ド レ ス
R16
専用
ト ラ ッ プ (デバ ッ グ ) 用の戻 り ア ド レ ス
R17
専用
例外用の戻 り ア ド レ ス
R18
専用
アセ ンブ ラ 用に予約済み
R19 ~ R31
不揮発性
関数呼び出 し を横切っ て保存する 必要があ り
RPC
特殊
プログラ ム カウン タ
RMSR
特殊
マシ ン ス テー タ ス レ ジ ス タ
MicroBlaze アーキテ ク チ ャ では、 32 個の汎用レ ジ ス タ (GPR) が定義 さ れます。 こ れ ら の レ ジ ス タ
は、 揮発性、 不揮発性、 お よ び専用に分類 さ れます。
•
揮発性レ ジ ス タ は、 一時保存 と し て使用 さ れ、 関数呼び出 し を横切っ て値を保持 し ません。 R3
~ R12 の レ ジ ス タ は揮発性で、 R3 お よ び R4 は呼び出 し 関数の戻 り 値に使用 さ れます。 R5 ~
R10 の レ ジ ス タ は、 サブルーチン間のパ ラ メ ー タ の引 き 渡 し に使用 さ れます。
•
R19 ~ R31 の レ ジ ス タ では、関数呼び出 し を横切っ て内容が保持 さ れ る ので、不揮発性の レ ジ
ス タ と 定義 さ れてい ます。 呼び出 さ れ る 側の関数では、 こ れ ら の不揮発性の レ ジ ス タ が保存 さ
れ る こ と にな っ てい ます。 こ れ ら は、 通常プ ロ ロ ーグ中に ス タ ッ ク に保存 さ れ、 エ ピ ロ ーグ中
に再び読み込まれます。
•
レ ジ ス タ には、 専用レ ジ ス タ と し て使用 さ れ る も の も あ り 、 プ ロ グ ラ マでは こ れ ら の レ ジ ス タ
は ど の用途に も 使用 さ れない こ と にな っ てい ます。
•
R14 ~ R17 の レ ジ ス タ は、 割 り 込み、 サブルーチン、 ト ラ ッ プ、 例外 と い う 順序で戻 り ア
ド レ ス を格納す る のに使用 さ れます。 サブルーチンは、 分岐お よ び リ ン ク 命令を使用 し て
呼び出 さ れ、 こ れ ら の命令では、 現在のプ ロ グ ラ ム カ ウ ン タ (PC) が レ ジ ス タ R15 に保存
さ れます。
•
68
ス モール デー タ 領域ポ イ ン タ は、 16 ビ ッ ト の即値があ る メ モ リ ロ ケーシ ョ ンにア ク セ ス
す る のに使用 さ れ ます。 こ れ ら の領域については、 「 メ モ リ モデル」 のセ ク シ ョ ン で説明
し ます。 読み出 し 専用の ス モール デー タ 領域 (SDA) ア ン カー R2 (読み出 し 専用) は、 リ テ
ラ ルの よ う な定数にア ク セ スす る のに使用 さ れ ます。 ま た SDA ア ン カー R13 (読み出 し /
書 き 込み) は、 ス モール デー タ 読み出 し /書 き 込みセ ク シ ョ ンの値にア ク セ スす る のに使用
さ れます。
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
ス タ ッ ク の規則
•
•
レ ジ ス タ R1 には、 ス タ ッ ク ポ イ ン タ の値が格納 さ れ、関数の入力 と 終了で更新 さ れます。
•
レ ジ ス タ R18 は、 アセ ンブ ラ 操作の一時的レ ジ ス タ と し て使用 さ れます。
MicroBlaze では、 プ ロ グ ラ ム カ ウ ン タ (rpc) お よ びマシ ン ス テー タ ス レ ジ ス タ (rmsr) の よ う
な特殊な レ ジ ス タ があ り ます。 こ れ ら の レ ジ ス タ は直接レ ジ ス タ フ ァ イ ルにマ ッ プ さ れていな
いため、 使用法は汎用の レ ジ ス タ と は異な り ます。 rmsr お よ び rpc の値は、 mts お よ び mfs 命
令を使用す る と 、 汎用レ ジ ス タ に転送で き ます。 詳細は、 第 4 章 の 「MicroBlaze アプ リ ケー
シ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI)」 を参照 し て く だ さ い。
ス タ ッ クの規則
MicroBlaze で使用す る ス タ ッ ク の規則を表 4-3 に示 し ます。
表 4-3 の影付 き の部分は、 呼び出 し 側の関数の ス タ ッ ク フ レームの部分を示 し 、 影な し の部分は、
呼び出 さ れ る 側の関数の フ レーム を示 し ます。 ス タ ッ ク フ レームの ABI 規則では、パ ラ メ ー タ の引
渡 し 、 不揮発性レ ジ ス タ の値の保持、 お よ び関数ないの ロ ーカル変数に対す る スペース の割 り 当て
に対す る プ ロ ト コ ルが定義 さ れてい ます。 その他のサブルーチンの呼び出 し を含む関数は非 リ ーフ
関数 と 呼ばれ、 こ れ ら の関数では各関数で使用す る ス タ ッ ク フ レーム領域を新規に作成す る 必要が
あ り ます。 プ ロ グ ラ ムの実行開始時に、 ス タ ッ ク ポ イ ン タ の値は最大で、 関数が呼び出 さ れ る と 、
各関数の ス タ ッ ク フ レームで必要 と な る ワ ー ド 数分だけ減少 し ます。 呼び出 し 側の関数の ス タ ッ ク
ポ イ ン タ の値は、 読み出 さ れ る 側の関数の ス タ ッ ク ポ イ ン タ の値に比べて大き いのが通常です。
表 4-3 : ス タ ッ ク の規則
ハイ ア ド レ ス
呼び出 さ れたサブルーチンに対す る 関数パ ラ メ ー タ
(Arg n ..Arg1)
( オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ
で必要 と な る 引数の最大数)
古い ス タ ッ ク ポ イ ン タ
リ ン ク レ ジ ス タ (R15)
呼び出 さ れ る 側の保存レ ジ ス タ (R31.....R19)
( オプシ ョ ン : 現在のプ ロ シージ ャ で使用 さ れ る レ ジ ス タ のみが保
存さ れる)
現在のプ ロ シージ ャ に対す る ロ ーカル変数
( オプシ ョ ン : プ ロ シージ ャ で ローカルが定義 さ れてい る と き のみ
表示)
フ ァ ン ク シ ョ ン パ ラ メ ー タ (Arg n .. Arg 1)
( オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ
で必要 と な る 引数の最大数)
新し いス タ ッ ク ポ イ ン タ
リ ン ク レジス タ
下位ア ド レ ス
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
69
R
第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
た と えば、 Func1 が Func2 を呼び出 し 、 Func2 が Func3 を呼び出す と し ます。 それぞれの イ ン ス タ
ン ス での ス タ ッ ク 表現を図 4-1 に示 し ます。 Func1 か ら の Func2 の呼び出 し 後に、ス タ ッ ク ポ イ ン
タ (SP) の値は減少 し ます。 こ の SP 値は、 Func3 の ス タ ッ ク フ レ ーム に対応 し て さ ら に減少 し ま
す。 Func3 か ら の戻っ て き た SP 値は Func 2 の元の値ま で増加 し ます。
図 4-1 を見 る と 、 ど の よ う に ス タ ッ ク が維持 さ れ る かがわか り ます。
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
図 4-1 : ス タ ッ ク フ レーム
呼び出 し 規則
呼び出 し 側の関数は、 レ ジ ス タ (R5 ~ R10) ま たは固有の ス タ ッ ク フ レーム を使用 し てパ ラ メ ー タ
を呼び出 さ れ る 側の関数に渡 し ます。 読み出 さ れ る 側では、 呼び出 し 側の ス タ ッ ク 領域を使用 し て
渡 さ れたパ ラ メ ー タ を格納 し ます。
図 4-1 を参照 し て く だ さ い。 Func2 のパ ラ メ ー タ は、レ ジ ス タ R5 ~ R10 ま たは Func1 に割 り 当て
ら れた ス タ ッ ク フ レームに格納 さ れます。
メ モ リ モデル
MicroBlaze の メ モ リ モデルは、 デー タ を次に示す 4 種類の領域に分類 し ます。
ス モール デー タ 領域
サ イ ズ が小 さ く 、 グ ロ ーバルに初期化 さ れた変数が こ の領域に格納 さ れ ま す。 こ の ス モール
デー タ 領域に格納 さ れ る 変数のサ イ ズ を 決定す る し き い値は、 MicroBlaze の C コ ン パ イ ラ
(mb-gcc) で 8 バ イ ト に設定 さ れてい ますが、 コ マ ン ド ラ イ ン のオプシ ョ ン を使用 し て コ ンパ
イ ラ で変更可能です。 こ のオプ シ ョ ン につい て の詳細につい て は、 『エ ン べデ ッ ド シ ス テ ム
ツール ガ イ ド 』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 64K バ イ ト の メ モ リ
は、 ス モール デー タ 領域に対 し て分割 さ れ ます。 こ の ス モール デー タ 領域には、 読み出 し /書
き 込み可能な ス モール デー タ 領域ア ン カー (R13) お よ び16 ビ ッ ト のオ フ セ ッ ト を使用 し て ア
ク セ ス し ます。 こ の領域にサ イ ズの小 さ い変数を割 り 当て る と 、 グ ロ ーバル変数にア ク セ スす
る コ ー ド に IMM 命令を追加す る 必要がな く な り ます。 こ のエ リ アに含ま れ る 変数は、 絶対ア
ド レ ス を使用 し て も ア ク セ ス で き ます。
70
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
割 り 込みおよび例外処理
デー タ 領域
値が比較的大 き く 初期化 さ れた変数は、 デー タ 領域に割 り 当て ら れます。 こ の領域には、 コ ン
パ イ ラ に渡 さ れた コ マン ド ラ イ ン オプシ ョ ン次第で、読み出 し /書 き 込み可能な SDA ア ン カー
(R13) ま たは絶対ア ド レ ス を使用 し て ア ク セ ス で き ます。
共有の未初期化領域
初期化 さ れていないグ ロ ーバル変数は、 共有の領域に割 り 当て ら れます。 こ の領域には、 絶対
ア ド レ ス ま たは読み出 し /書 き 込み可能な ス モール デー タ 領域ア ン カー (R13) を使用 し て ア ク
セ ス で き ます。
リ テ ラルま たは定数
定数は、 読み出 し 専用の ス モール デー タ 領域に配置 さ れ、 読み出 し 専用の ス モール デー タ 領
域ア ン カー (R2) を使用 し てア ク セ ス さ れます。
コ ンパ イ ラ では、 ベース ポ イ ン タ と し て動作す る グ ロ ーバル ポ イ ン タ が生成 さ れます。 SDA ア ン
カーの値は、 最終 リ ン ク ス テージで リ ン カで決定 さ れます。 メ モ リ の各セ ク シ ョ ンに関す る 情報に
ついては、 『エンべデ ッ ド シ ス テ ム ツール ガ イ ド 』 の 「ア ド レ ス管理」 の章を参照 し て く だ さ い。
コ ンパ イ ラ では、 使用 さ れ る コ マ ン ド ラ イ ン オプシ ョ ンに従っ て、 適切なセ ク シ ョ ン が生成 さ れ
ます。 こ れ ら のオプシ ョ ンについては、 『エンべデ ッ ド シ ス テ ム ツール ガ イ ド 』 の 「GNU コ ンパ
イ ラ ツール」 を参照 し て く だ さ い。
割 り 込みおよび例外処理
MicroBlaze では、 表 4-4 に示す よ う に割 り 込みお よ び例外を処理す る 固有のア ド レ ス ロ ケーシ ョ
ンが想定 さ れ ます。 デバ イ ス の電源がオンにな る と き 、 ま たは リ セ ッ ト さ れ る と き は、 実行は 0x0
で開始 し ます。 実行が発生す る と 、MicroBlaze はア ド レ ス ロ ケーシ ョ ン 0X8 にジ ャ ンプ し ますが、
割 り 込みがあ る 場合は制御がア ド レ ス ロ ケーシ ョ ン 0x10 に渡 さ れます。 こ れ ら の ロ ケーシ ョ ンで
は、 コ ー ド が適切なハン ド ラ にジ ャ ンプす る よ う に記述 さ れてい ます。
表 4-4 : 割 り 込みおよび例外処理
オン
ハー ド ウ ェ アのジ ャ ン プ先
ソ フ ト ウ ェ ア ラ ベル
開始/ リ セ ッ ト
0x0
_start
例外
0x8
_exception_handler
割 り 込み
0x10
_interrupt_handler
こ れ ら の ロ ケーシ ョ ンで予期 さ れ る コ ー ド を図 4-2 に示 し ます。 -xl-mode-xmdstub コ ンパ イ ラ オ
プシ ョ ン を使用せずに コ ンパ イ ル さ れたプ ロ グ ラ ムの場合、 mb-gcc コ ンパ イ ラ に よ っ て crt0.o 初
期化フ ァ イ ルが mb-ld リ ン カに渡 さ れます。 こ の フ ァ イ ルでは、 例外ハン ド ラ での適切なア ド レ ス
が設定 さ れます。
-xl-mode-xmdstub コ ンパ イ ラ オプシ ョ ン を使用 し て コ ンパ イ ル さ れたプ ロ グ ラ ムの場合、crt1.o 初
期化フ ァ イ ルは、 出力プ ロ グ ラ ム に リ ン ク さ れ ま す。 こ のプ ロ グ ラ ム は、 ア ド レ ス ロ ケーシ ョ ン
0x0 に既に読み込まれてい る xmdstub と と も に実行す る 必要があ り ます。 し たが っ て、 ラ ン ラ イ ム
時には例外お よ び割 り 込みハ ン ド ラ の ア ド レ ス に従 っ て crt1.o の初期化 コ ー ド で適切な命令が ロ
ケーシ ョ ン 0x8 ~ 0x14 に書き 出 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
71
R
第 4 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
図 4-2 : 例外および割 り 込みハン ド ラ に制御を渡す コ ー ド
0x00:
0x04:
0x08:
0x0c:
0x10:
0x14:
bri
nop
imm
bri
imm
bri
_start1
high bits of address (exception handler)
_exception_handler
high bits of address (interrupt handler)
_interrupt_handler
MicroBlaze では、32 ビ ッ ト を使用 し て ア ド レ ス指定が可能ないずれのア ド レ ス ロ ケーシ ョ ンに も 、
例外お よ び割 り 込みハ ン ド ラ の ルー チ ン を 配置 で き ま す。 例外ハ ン ド ラ の コ ー ド は、 ラ ベ ル
_exception_handler で始ま り 、 割 り 込みハン ド ラ の コ ー ド は _interrupt_handler で始ま り ます。
現段階の MicroBlaze シ ス テ ム では、 割 り 込み ま たは例外処理に対 し て ユーザーが変更可能な ダ
ミ ーのルーチンがあ り ます。 こ れ ら のルーチンに上書 き す る には、 割 り 込みハン ド ラ お よ び例外ハ
ン ド ラ を リ ン ク し 、 割 り 込みハ ン ド ラ の コ ー ド を属性 interrupt_handler で定義す る 必要が あ り ま
す。 割 り 込みハン ド ラ 属性の使用方法お よ び構文についての詳細については、 『エ ンべデ ッ ド シ ス
テ ム ツール ガ イ ド 』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。
72
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
第5章
MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
サマ リ
こ の章では、 MicroBlaze の命令セ ッ ト アーキ テ ク チ ャ について詳 し く 説明 し ます。
表記法
こ の章で使用 さ れ る シ ン ボルの定義を表 5-1 に示 し ます。
表 5-1 : シ ンボル表記
シ ンボル
意味
+
加算
-
減算
×
乗算
∧
ビ ッ ト 単位の論理 AND
∨
ビ ッ ト 単位の論理 OR
⊕
ビ ッ ト 単位の論理 XOR
x
ビ ッ ト 単位の補数 x
←
割 り 当て
>>
右方向へシ フ ト
<<
左方向へシ フ ト
rx
レジス タ x
x[i]
レ ジ ス タ x 内に ビ ッ ト i が含まれ る
x[i:j]
レ ジ ス タ x に ビ ッ ト i ~ j が含まれ る
=
等式
≠
不等式
>
比較対象 よ り 大 き い
>=
<
<=
sext(x)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
比較対象以上
比較対象 よ り 小 さ い
比較対象以下
符号拡張 x
www.xilinx.co.jp
73
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
表 5-1 : シ ンボル表記 (続き )
シ ンボル
Mem(x)
FSLx
LSW(x)
意味
ア ド レ ス x の メ モ リ ロ ケーシ ョ ン
FSL イ ン タ ーフ ェ イ ス x
x の最下位 ワー ド
フ ォ ーマ ッ ト
MicroBlaze では、 タ イ プ A と タ イ プ B と い う 2 つの命令フ ォーマ ッ ト が使用 さ れます。
タ イプ A
タ イ プ A は、 レ ジ ス タ 間の命令に使用 さ れます。 こ の タ イ プでは、 オペ コ ー ド 、 デス テ ィ ネーシ ョ
ン レ ジ ス タ 1 個、 ソ ース レ ジ ス タ 2 個が含まれます。
オペ コ ー ド
0
デス テ ィ ネーシ ョ ン
レジス タ
6
ソ ース レ ジ ス タ A
11
ソ ース レ ジ ス タ B
16
0
0
0
0
21
0
0
0
0
0
0
0
31
タ イプ B
タ イ プ B は、 レ ジ ス タ 間の命令に使用 さ れます。 こ の タ イ プには、 オペ コ ー ド 、 デス テ ィ ネーシ ョ
ン レ ジ ス タ 1 個、 ソ ース レ ジ ス タ 2 個、 お よ び 16 ビ ッ ト の即値が含まれます。
オペ コ ー ド
0
デス テ ィ ネーシ ョ ン
レジス タ
6
ソ ース レ ジ ス タ A
11
即値
16
31
命令
こ のセ ク シ ョ ンでは、 MicroBlaze の命令について説明 し ます。 命令は、 アルフ ァ ベ ッ ト 順に示 さ れ
てお り 、 各命令に対 し て簡略 コ ー ド 、 エ ン コ ー ド 、 説明、 命令セマ ン テ ィ ッ ク ス の擬似 コ ー ド 、 お
よ びその命令で変更を加え る レ ジ ス タ の一覧が示 さ れてい ます。
74
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
add
0
0
0
Arithmetic Add
0
add
rD, rA, rB
Add
addc
rD, rA, rB
Add with Carry
addk
rD, rA, rB
Add and Keep Carry
addkc
rD, rA, rB
Add with Carry and Keep Carry
K C 0
rD
6
rA
11
rB
16
0
0
21
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA と rB の内容の合計が レ ジ ス タ rD に格納 さ れます。
命令のビ ッ ト 3 (図で K と 表記) は、addk に対 し 1 に設定 さ れてい ます。 命令の ビ ッ ト 4 (図で C と
表記) は、addc に対 し 1 に設定 さ れてい ます。 こ の両ビ ッ ト は、addkc に対 し 1 に設定 さ れてい ます。
add 命令でビ ッ ト 3 が設定 さ れてい る 場合 (addk、 addkc)、 キ ャ リ ー フ ラ グでは命令の実行後の結
果に関係せず既存の値が保持 さ れます。 ビ ッ ト 3 が ク リ ア さ れ る と (add、 addc)、 キ ャ リ ー フ ラ グ
は命令の実行後の値が変更 さ れます。
ビ ッ ト 4 が 1 に設定 さ れ る と (addc、 addkc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影
響 し ます。 ビ ッ ト 4 が ク リ ア さ れ る と (add、 addk)、 キ ャ リ ー フ ラ グの内容は命令の実行に影響 し
ません (通常の加算が実行 さ れます)。
擬似 コ ー ド
if C = 0 then
(rD) ← (rA) + (rB)
else
(rD) ←(rA) + (rB) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
命令オペ コ ー ド 内の C ビ ッ ト は、 MSR レ ジ ス タ に含まれ る キ ャ リ ー ビ ッ ト と は同等ではあ り ま
せん。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
75
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
addi
0
0
0
Arithmetic Add Immediate
1
K
addi
rD, rA, IMM
Add Immediate
addic
rD, rA, IMM
Add Immediate with Carry
addik
rD, rA, IMM
Add Immediate and Keep Carry
addikc
rD, rA, IMM
Add Immediate with Carry and Keep Carry
C 0
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト ま で符号拡張 さ れ る 、 IMM フ ィ ール ド に含まれ る 値の合計が、 レ
ジ ス タ rD に格納 さ れます。 命令の ビ ッ ト 3 (図で K と 表記) は、 addik に対 し 1 に設定 さ れてい ま
す。 命令の ビ ッ ト 4 (図で C と 表記) は、 addc に対 し 1 に設定 さ れてい ます。 両ビ ッ ト は、 addikc に
対 し 1 に設定 さ れてい ます。
addi 命令でビ ッ ト 3 が設定 さ れてい る 場合 (addik、 addikc)、 キ ャ リ ー フ ラ グでは命令の実行後の
結果に関係せず既存の値が保持 さ れます。 ビ ッ ト 3 が ク リ ア さ れ る と (addi、 addic)、 キ ャ リ ー フ ラ
グは命令の実行後の値が変更 さ れます。
ビ ッ ト 4 が 1 に設定 さ れ る と (addic、 addikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に
影響 し ます。 ビ ッ ト 4 が ク リ ア さ れ る と (addi、 addik)、 キ ャ リ ー フ ラ グの内容は命令の実行に影響
し ません (通常の加算が実行 さ れます)。
擬似 コ ー ド
if C = 0 then
(rD) ← (rA) + sext(IMM)
else
(rD) ←(rA) + sext(IMM) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
命令オペ コ ー ド 内の C ビ ッ ト は、 MSR レ ジ ス タ に含まれ る キ ャ リ ー ビ ッ ト と は同等ではあ り ま
せん。
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
76
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
and
Logical AND
and
1
0
0
0
0
0
1
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
21
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容が AND を介 し て レ ジ ス タ rD に格納 さ れます。
擬似 コ ー ド
(rD) ← (rA) ∧ (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
77
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
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 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
78
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
andn
Logical AND NOT
andn
1
0
0
0
0
1
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 の内容の論理補数が AND を介 し て レ ジ ス タ rD に格納 さ れ
ます。
擬似 コ ー ド
(rD) ← (rA) ∧ (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
79
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
andni
Logical AND NOT with Immediate
andni
1
0
0
1
0
1
1
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
IMM フ ィ ール ド は、 32 ビ ッ ト ま で符号拡張 さ れ ま す。 レ ジ ス タ rA の内容 と 拡張 さ れ た IMM
フ ィ ール ド の論理補数が AND を介 し て レ ジ ス タ rD に格納 さ れます。
擬似 コ ー ド
(rD) ← (rA) ∧ (sext(IMM))
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
80
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
beq
1
0
0
Branch if Equal
0
1
1
beq
rA, rB
Branch if Equal
beqd
rA, rB
Branch if Equal with Delay
1 D 0
0
0
6
0
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
rA が 0 の場合、 rB のオ フ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ ト は、 ア
ド レ ス PC + rB の命令です。
beqd では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ る こ と を意味 し 、 分岐後の命令 (つま り 分岐遅
延ス ロ ッ ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ
ト がセ ッ ト さ れていない場合、遅延ス ロ ッ ト がない こ と を意味 し 、分岐後に実行す る 命令が タ ーゲ ッ
ト 命令 と な り ます。
擬似 コ ー ド
If rA = 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐が不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
81
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
beqi
1
0
0
Branch Immediate if Equal
1
1
1
beqi
rA, IMM
Branch Immediate if Equal
beqid
rA, IMM
Branch Immediate if Equal with Delay
1 D 0
0
6
0
0
rA
11
IMM
16
31
説明
rA が 0 の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る 命令に分岐 し ま す。 分岐の タ ーゲ ッ ト は、
ア ド レ ス PC + IMM の命令です。
beqid では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA = 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐が不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
82
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
bge
1
0
0
Branch if Greater or Equal
0
1
1
bge
rA, rB
Branch if Greater or Equal
bged
rA, rB
Branch if Greater or Equal with Delay
1 D 0
1
0
6
1
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
rA が 0 以上の場合、 rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の ターゲ ッ ト は、
ア ド レ ス PC + rB の命令です。
bged では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA >= 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐が不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
83
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bgei
1
0
0
Branch Immediate if Greater or Equal
1
1
1
bgei
rA, IMM
Branch Immediate if Greater or Equal
bgeid
rA, IMM
Branch Immediate if Greater or Equal with Delay
1 D 0
1
6
0
1
rA
11
IMM
16
31
説明
rA が 0 以上の場合、 IMM のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ ト
は、 ア ド レ ス PC + IMM の命令です。
bgeid では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA >= 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
84
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
bgt
1
0
0
Branch if Greater Than
0
1
1
bgt
rA, rB
Branch if Greater Than
bgtd
rA, rB
Branch if Greater Than with Delay
1 D 0
1
0
6
0
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
rA が 0 を超え る 値の場合、rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ
ト は、 ア ド レ ス PC + rB の命令です。
bgtd では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA > 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
85
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bgti
1
0
0
Branch Immediate if Greater Than
1
1
1
bgti
rA, IMM
Branch Immediate if Greater Than
bgtid
rA, IMM
Branch Immediate if Greater Than with Delay
1 D 0
1
6
0
0
rA
11
IMM
16
31
説明
rA が 0 を超え る 値の場合、 IMM のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ー
ゲ ッ ト は、 ア ド レ ス PC + IMM の命令です。
bgtid では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA > 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
86
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
ble
1
0
0
Branch if Less or Equal
0
1
1
ble
rA, rB
Branch if Less or Equal
bled
rA, rB
Branch if Less or Equal with Delay
1 D 0
0
1
6
1
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
rA が 0 以下の場合、 rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の ターゲ ッ ト は、
ア ド レ ス PC + rB の命令です。
bled では、 D ビ ッ ト がセ ッ ト さ れ ます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA <= 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
87
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
blei
1
0
0
Branch Immediate if Less or Equal
1
1
1
blei
rA, IMM
Branch Immediate if Less or Equal
bleid
rA, IMM
Branch Immediate if Less or Equal with Delay
1 D 0
0
6
1
1
rA
11
IMM
16
31
説明
rA が 0 以下の場合、 IMM のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ ト
は、 ア ド レ ス PC + IMM の命令です。
bleid では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA <= 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
88
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
blt
1
0
Branch if Less Than
0
0
1
1
blt
rA, rB
Branch if Less Than
bltd
rA, rB
Branch if Less Than with Delay
1 D 0
0
1
6
0
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
rA が 0 未満の場合、 rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の ターゲ ッ ト は、
ア ド レ ス PC + rB の命令です。
bltd では、 D ビ ッ ト がセ ッ ト さ れ ます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA < 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
89
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
blti
1
0
0
Branch Immediate if Less Than
1
1
1
blti
rA, IMM
Branch Immediate if Less Than
bltid
rA, IMM
Branch Immediate if Less Than with Delay
1 D 0
0
6
1
0
rA
11
IMM
16
31
説明
rA が 0 未満の場合、 IMM のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ ト
は、 ア ド レ ス PC + IMM の命令です。
bltid では、D ビ ッ ト が設定 さ れます。 D ビ ッ ト では、分岐遅延ス ロ ッ ト の有無を決定 し ます。 D ビ ッ
ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ る こ と を意味 し 、 分岐後の命令 (分岐遅延 ス ロ ッ ト
にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ ト
さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令 と
な り ます。
擬似 コ ー ド
If rA < 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
90
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
bne
1
0
0
Branch if Not Equal
0
1
1
bne
rA, rB
Branch if Not Equal
bned
rA, rB
Branch if Not Equal with Delay
1 D 0
0
0
6
1
rA
11
rB
1
6
0
0
0
0
2
1
0
0
0
0
0
0
0
31
説明
rA が 0 ではない場合、 rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ ト
は、 ア ド レ ス PC + rB の命令です。
bned では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA ≠ 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
91
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bnei
1
0
0
Branch Immediate if Not Equal
1
1
1
bnei
rA, IMM
Branch Immediate if Not Equal
bneid
rA, IMM
Branch Immediate if Not Equal with Delay
1 D 0
0
6
0
1
rA
11
IMM
16
31
説明
rA が 0 ではない場合、 IMM のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐の タ ーゲ ッ
ト は、 ア ド レ ス PC + IMM の命令です。
bneid では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有無を決定 し ます。 D
ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、分岐後の命令 (分岐遅延ス ロ ッ
ト にあ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き ます。 D ビ ッ ト がセ ッ
ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る 命令が タ ーゲ ッ ト 命令
と な り ます。
擬似 コ ー ド
If rA ≠ 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る 場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
92
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
br
1
0
Unconditional Branch
0
0
1
1
br
rB
Branch
bra
rB
Branch Absolute
brd
rB
Branch with Delay
brad
rB
Branch Absolute with Delay
brld
rD, rB
Branch and Link with Delay
brald
rD, rB
Branch Absolute and Link with Delay
0
rD
6
D A L
0
0
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
rB で決定 さ れ る ア ド レ ス に含まれ る 命令に分岐 し ます。
brld お よ び brald では、 L ビ ッ ト がセ ッ ト さ れます。 L ビ ッ ト がセ ッ ト さ れ る 場合、 リ ン ク が実行
さ れます。 PC の現在の値が rD に格納 さ れます。
bra、 brad、 お よ び brald では、 A ビ ッ ト がセ ッ ト さ れます。 A ビ ッ ト がセ ッ ト さ れ る 場合、 絶対値
に分岐 し 、 タ ーゲ ッ ト は rB に格納 さ れてい る 値にな り ます。 こ の ビ ッ ト がセ ッ ト さ れない場合は、
相対分岐 と な り 、 タ ーゲ ッ ト は PC + rB と な り ます。
bra、 brad、 お よ び brald では、 D ビ ッ ト がセ ッ ト さ れます。 D ビ ッ ト では、 分岐遅延ス ロ ッ ト の有
無を決定 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、 遅延ス ロ ッ ト があ る こ と を意味 し 、 分岐後の
命令 (分岐遅延 ス ロ ッ ト に あ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ と がで き
ます。 D ビ ッ ト がセ ッ ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に実行す る
命令が タ ーゲ ッ ト 命令 と な り ます。
擬似 コ ー ド
if L = 1 then
(rD) ← PC
if A = 1 then
PC ← (rB)
else
PC ← PC + (rB)
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
rD
•
PC
レ イテンシ
2 ク ロ ッ ク サ イ ク ル (D ビ ッ ト がセ ッ ト さ れてい る 場合) ま たは 3 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が
セ ッ ト さ れていない場合)
メモ
命令 brl お よ び bral は、 使用で き ません。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
93
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bri
1
0
Unconditional Branch Immediate
0
1
1
1
bri
IMM
Branch Immediate
brai
IMM
Branch Absolute Immediate
brid
IMM
Branch Immediate with Delay
braid
IMM
Branch Absolute Immediate with Delay
brlid
rD, IMM
Branch and Link Immediate with Delay
bralid
rD, IMM
Branch Absolute and Link Immediate with Delay
0
rD
6
D A
11
L
0
0
IMM
16
31
説明
32 ビ ッ ト に符号拡張 さ れ る IMM で決定 さ れ る ア ド レ ス に含まれてい る 命令に分岐 し ます。
brlid お よ び bralid では、 L ビ ッ ト がセ ッ ト さ れます。 L ビ ッ ト がセ ッ ト さ れ る 場合、 リ ン ク が実行
さ れます。 PC の現在の値が rD に格納 さ れます。
brai、 braid、 お よ び bralid では、 A ビ ッ ト がセ ッ ト さ れます。 A ビ ッ ト がセ ッ ト さ れ る 場合、 絶対
値に分岐 し 、 タ ーゲ ッ ト は IMM に格納 さ れてい る 値にな り ます。 こ の ビ ッ ト がセ ッ ト さ れない場
合は、 相対分岐 と な り 、 タ ーゲ ッ ト は PC + IMM と な り ます。
brid、 braid、 brlid、 お よ び bralid では、 D ビ ッ ト がセ ッ ト さ れ ま す。 D ビ ッ ト では、 分岐遅延 ス
ロ ッ ト の有無を決定 し ます。 D ビ ッ ト がセ ッ ト さ れてい る 場合、遅延ス ロ ッ ト があ る こ と を意味 し 、
分岐後の命令 (分岐遅延 ス ロ ッ ト に あ る 命令) の実行を タ ーゲ ッ ト の命令の実行前に完了 さ せ る こ
と がで き ます。 D ビ ッ ト がセ ッ ト さ れていない場合、 遅延ス ロ ッ ト がない こ と を意味 し 、 分岐後に
実行す る 命令が タ ーゲ ッ ト 命令 と な り ます。
擬似 コ ー ド
if L = 1 then
(rD) ← PC
if A = 1 then
PC ← (IMM)
else
PC ← PC + (IMM)
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
rD
•
PC
レ イテンシ
2 ク ロ ッ ク サ イ ク ル (D ビ ッ ト がセ ッ ト さ れてい る 場合) ま たは 3 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が
セ ッ ト さ れていない場合)
94
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
メモ
命令 brli お よび brali は、 使用で き ません。
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
95
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
brk
Break
brk
1
0
0
0
1
1
0
rD, rB
rD
6
0
11
1
1
0
0
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
rB の ア ド レ ス 値に格納 さ れ る 命令に分岐、 リ ン ク し ま す。 PC の現在の値が rD に格納 さ れ ま す。
MSR の BIP フ ラ グがセ ッ ト さ れます。
擬似 コ ー ド
(rD) ← PC
PC ← (rB)
MSR[BIP] ←1
変更 さ れる レ ジ ス タ
•
rD
•
PC
•
MSR[BIP]
レ イテンシ
3 ク ロ ッ ク サイ クル
96
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
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 フ ラ グがセ ッ ト さ れます。
擬似 コ ー ド
(rD) ← PC
PC ← sext(IMM)
MSR[BIP] ←1
変更 さ れる レ ジ ス タ
•
rD
•
PC
•
MSR[BIP]
レ イテンシ
3 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
97
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bs
0
0
Barrel Shift
1
0
0
0
bsrl
rD, rA, rB
Barrel Shift Right Logical
bsra
rD, rA, rB
Barrel Shift Right Arithmetical
bsll
rD, rA, rB
Barrel Shift Left Logical
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 ビ ッ ト (サ イ ド ビ ッ ト ) がセ ッ ト さ れます。 S ビ ッ ト がセ ッ ト さ れてい る 場合は、 バレ
ル シ フ ト が左側に実行 さ れます。 bsrl お よ び bsra では、 S ビ ッ ト が ク リ ア さ れ右側へのシ フ ト が実
行 さ れます。
bsra では、 T ビ ッ ト ( タ イ プ ビ ッ ト ) がセ ッ ト さ れます。 T ビ ッ ト がセ ッ ト さ れてい る 場合、 バレ ル
シ フ ト は算術演算にな り ます。 bsrl お よ び bsll では T ビ ッ ト が ク リ ア さ れ、バ レル シ フ ト は論理演
算 と な り ます。
擬似 コ ー ド
if S = 1 then
(rD) ← (rA) << (rB)[27:31]
else
if T = 1 then
if ((rB)[27:31]) ≠ 0 then
(rD)[0:(rB)[27:31]-1] ← (rA)[ 0]
(rD)[(rB)[27:31]:31] ← (rA) >> (rB)[27:31]
else
(rD) ← (rA)
else
(rD) ← (rA) >> (rB)[27:31]
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
こ れ ら の命令は、 オプシ ョ ンです。 C_USE_BARREL が MicroBlaze でセ ッ ト さ れてい る 場合のみ
有効です。
98
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
bsi
0
0
1
Barrel Shift Immediate
1
0
0
bsrli
rD, rA, IMM
Barrel Shift Right Logical Immediate
bsrai
rD, rA, IMM
Barrel Shift Right Arithmetical Immediate
bslli
rD, rA, IMM
Barrel Shift Left Logical Immediate
1
rD
6
rA
11
0
0
16
0
0
0
S T
21
0
0
0
0
IMM
27
31
説明
IMM で指定 さ れた分だけ レ ジ ス タ rA の内容を シ フ ト し 、 その結果を レ ジ ス タ rD に格納 し ます。
bsll では、 S ビ ッ ト (サ イ ド ビ ッ ト ) がセ ッ ト さ れます。 S ビ ッ ト がセ ッ ト さ れてい る 場合は、 バレ
ル シ フ ト が左側に実行 さ れます。 bsrl お よ び bsra では、 S ビ ッ ト が ク リ ア さ れ右側へのシ フ ト が実
行 さ れます。
bsra では、 T ビ ッ ト ( タ イ プ ビ ッ ト ) がセ ッ ト さ れます。 T ビ ッ ト がセ ッ ト さ れてい る 場合、 バレ ル
シ フ ト は算術演算にな り ます。 bsrl お よ び bsll では T ビ ッ ト が ク リ ア さ れ、バ レル シ フ ト は論理演
算 と な り ます。
擬似 コ ー ド
if S = 1 then
(rD) ← (rA) << IMM
else
if T = 1 then
if IMM ≠ 0 then
(rD)[0:IMM-1] ← (rA)[ 0]
(rD)[IMM:31] ← (rA) >> IMM
else
(rD) ← (rA)
else
(rD) ← (rA) >> IMM
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
こ れ ら は、 タ イ プ B の命令ではあ り ません。 その前に IMM 命令の影響を受け ません。
こ れ ら の命令は、 オプシ ョ ンです。 C_USE_BARREL が MicroBlaze でセ ッ ト さ れてい る 場合のみ
有効です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
99
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
cmp
0
0
0
Integer Compare
0
1
0
cmp
rD, rA, rB
compare rB with rA (signed)
cmpu
rD, rA, rB
compare rB with rA (unsigned)
1
rD
6
rA
rB
11
16
0
21
0
0
0
0
0
0
0
0 U 0
31
説明
レ ジ ス タ rA の内容が レ ジ ス タ rB の内容か ら 減算 さ れ、 その結果が レ ジ ス タ rD に格納 さ れます。
rD の MSB ビ ッ ト は、 rA と rB 間で True の関係を示す よ う に調整 さ れます。 U ビ ッ ト がセ ッ ト さ
れてい る 場合、 rA と rB は符号な し の値 と みな さ れます。 U ビ ッ ト が ク リ アの場合、 rA と rB は符
号付 き の値 と みな さ れます。
擬似 コ ー ド
if (rA) = (rB) then
(rD) ← 0
else
(rD)(MSB) ←(rA) > (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
.
100
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
get
0
0
1
get from fsl interface
1
0
1
get
rD, FSLx
get data from FSL x (blocking)
nget
rD, FSLx
get data from FSL x (non-blocking)
cget
rD, FSLx
get control from FSL x (blocking)
ncget
rD, FSLx
get control from FSL x (non-blocking)
1
rD
6
0
0
0
0
11
0
0
n
c
0
0
0
0
0
0
0
16
0
0
0
FSLx
29
31
説明
FSLx イ ン タ ーフ ェ イ ス か ら 読み出 し た結果が レ ジ ス タ rD に格納 さ れます。
get 命令は、 4 種類あ り ます。
ブ ロ ッ ク が あ る 場合 (n ビ ッ ト が 0 の場合) は、 FSL イ ン タ ー フ ェ イ ス か ら のデー タ が有効な間
MicroBlaze を中断 し ます。 ブ ロ ッ ク がない場合は、 MicroBlaze は中断 さ れず、 デー タ が有効な場
合はキ ャ リ ーが 0 に、 無効の場合は 1 にセ ッ ト さ れます。
get お よ び nget 命令では、 FSL イ ン タ ーフ ェ イ ス の制御ビ ッ ト が 0 であ る こ と が想定 さ れ ます。 0
ではない場合は、命令で MSR[FSL_Error] が 1 にセ ッ ト さ れます。 cget お よ び ncget 命令では、FSL
イ ン タ ー フ ェ イ ス の 制御 ビ ッ ト が 1 で あ る こ と が 想定 さ れ ま す。 0 で は な い 場合 は、 命令 で
MSR[FSL_Error] が 1 にセ ッ ト さ れます。
擬似 コ ー ド
(rD) ← FSLx
if (n = 1) then
MSR[Carry] ← not (FSLx Exists bit)
if ((FSLx Control bit) == c) then
MSR[FSL_Error] ← 0
else
MSR[FSL_Error] ←1
変更 さ れる レ ジ ス タ
•
rD
•
MSR[FSL_Error]
•
MSR[Carry]
レ イテンシ
2 ク ロ ッ ク サ イ ク ル ( ブ ロ ッ ク な し 、 ま たはデー タ が FSL イ ン ターフ ェ イ ス で有効な場合) ブ ロ ッ
ク あ り の命令の場合、 デー タ が有効な間 MicroBlaze は中断 さ れます。
メモ
nget お よ び ncget では、 rsubc 命令を使用 し て、 イ ンデ ッ ク ス変数を カ ウ ン ト ダ ウ ンで き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
101
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
idiv
0
0
1
Integer Divide
0
0
1
idiv
rD, rA, rB
divide rB by rA (signed)
idivu
rD, rA, rB
divide rB by rA (unsigned)
0
rD
6
rA
rB
11
16
0
0
0
0
0
0
0
0
0 U 0
21
31
説明
レ ジ ス タ rB の内容が レ ジ ス タ rA の内容で除算 さ れ、 その結果が レ ジ ス タ rD に格納 さ れます。
U ビ ッ ト がセ ッ ト さ れてい る 場合、 rA と rB は符号な し の値 と みな さ れます。 U ビ ッ ト が ク リ アの
場合、 rA と rB は符号付 き の値 と みな さ れます。
rA の値が 0 の場合、 MSR の devide_by_zero ビ ッ ト がセ ッ ト さ れ、 rD の値は 0 にな り ます。
擬似 コ ー ド
if (rA) = 0then
(rD) ← 0
else
(rD) ←(rB) / (rA)
変更 さ れる レ ジ ス タ
•
rD
•
MSR[Divide_By_Zero]
レ イテンシ
(rA) = 0 の場合は 2 ク ロ ッ ク サ イ ク ル、 それ以外は 34 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、MicroBlaze がハー ド ウ ェ アの除算器 と し て コ ン フ ィ ギ ュ レーシ ョ ン さ れてい る 場合の
みに有効です。
102
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
.
imm
Immediate
imm
1
0
0
1
1
0
0
0
0
0
IMM
0
6
0
0
0
0
11
0
0
IMM
16
31
説明
IMM 命令では、 IMM の値が一時的な レ ジ ス タ に読み込まれます。 ま た こ の命令では、 次の命令で
こ の値を使用 し 32 ビ ッ ト の即値を作成で き る よ う に、 こ の値が ロ ッ ク さ れます。
IMM 命令は、 タ イ プ B の命令 と 共に使用 さ れます。 タ イ プ B の命令では 16 ビ ッ ト の即値フ ィ ー
ル ド し かないため、 32 ビ ッ ト の即値は直接使用で き ませんが、 MicroBlaze では 32 ビ ッ ト の即値を
使用で き ます。 デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、
その符号が拡張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、タ
イ プ B の命令の前に IMM 命令を使用す る こ と で実行で き ます。 IMM 命令では、16 ビ ッ ト の IMM
値を 次の命令に対 し て一時的に ロ ッ ク し ま す。 こ の IMM 命令の直後の タ イ プ B 命令では、 こ の
IMM 命令の 16 ビ ッ ト の IMM 値か ら 32 ビ ッ ト の即値 (上位 16 ビ ッ ト ) が作成 さ れ、 ま た独自の
16 ビ ッ ト の即値 (下位 16 ビ ッ ト ) が作成 さ れ ま す。 タ イ プ B の命令が IMM 命令に続かない場合
は、 ロ ッ ク さ れた値が解除 さ れます。
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
IMM 命令お よ び後続の タ イ プ B 命令は不可分のため、 こ の 2 つの命令の間にほかの命令を割 り 込
ませ る こ と はで き ません。
ザ イ リ ン ク ス で提供す る アセ ンブ ラ では、 IMM 命令の要求が自動的に検出 さ れ ます。 32 ビ ッ ト の
IMM 値が タ イ プ B 命令で指定 さ れてい る 場合、アセ ンブ ラ では命令を アセ ンブルす る ために IMM
値が 16 ビ ッ ト の値に変換 さ れ、 実行フ ァ イ ルでその命令の前に IMM 命令が記述 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
103
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lbu
Load Byte Unsigned
lbu
1
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 を加算 し た結果の メ モ リ ロ ケーシ ョ ン か ら バ イ ト (8 ビ ッ ト ) を読み込み ます。
レ ジ ス タ rD の LSB に含まれ る デー タ お よ び rD 内のその他の 3 バ イ ト は ク リ ア さ れます。
擬似 コ ー ド
Addr ← (rA) + (rB)
(rD)[24:31] ← Mem(Addr)
(rD)[0:23] ← 0
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
104
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
lbui
Load Byte Unsigned Immediate
lbui
1
0
1
1
0
0
0
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号が拡張 さ れた IMM 内の値を加算 し た結果の メ モ リ ロ ケー
シ ョ ンか ら バ イ ト (8 ビ ッ ト ) を読み込みます。 レ ジ ス タ rD の LSB に含まれ る デー タ お よ び rD 内
のその他の 3 バ イ ト は ク リ ア さ れます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
(rD)[24:31] ← Mem(Addr)
(rD)[0:23] ← 0
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
105
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lhu
Load Halfword Unsigned
lhu
1
0
1
0
0
0
1
rD, rA, rB
rD
6
rA
rB
11
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA と rB を加算 し た結果をハーフ ワ ー ド に揃え た メ モ リ ロ ケーシ ョ ンか ら ハーフ ワ ー ド
(16 ビ ッ ト ) を読み込みます。 レ ジ ス タ rD の最下位ハーフ ワ ー ド に格納 さ れてい る デー タ お よ び rD
内の最上位ハーフ ワ ー ド は ク リ ア さ れます。
擬似 コ ー ド
Addr ← (rA) + (rB)
Addr[31] ← 0
(rD)[16:31] ← Mem(Addr)
(rD)[0:15] ← 0
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
106
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
lhui
Load Halfword Unsigned Immediate
lhui
1
0
1
1
0
0
1
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号が拡張 さ れた IMM 内の値を加算 し た結果をハーフ ワ ー ド に
揃え た メ モ リ ロ ケーシ ョ ンか ら ハーフ ワ ー ド (16 ビ ッ ト ) を読み込み ます。 レ ジ ス タ rD の最下位
ハーフ ワ ー ド に格納 さ れてい る デー タ お よ び rD 内の最上位ハーフ ワ ー ド は ク リ ア さ れます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
Addr[31] ← 0
(rD)[16:31] ← Mem(Addr)
(rD)[0:15] ← 0
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
107
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lw
Load Word
lw
1
0
1
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 を加算 し た結果を ワ ー ド に揃えた メ モ リ ロ ケーシ ョ ンか ら ワ ー ド (32 ビ ッ ト ) を
読み込みます。 デー タ は、 レ ジ ス タ rD に格納 さ れます。
擬似 コ ー ド
Addr ← (rA) + (rB)
Addr[30:31] ← 00
(rD) ← Mem(Addr)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
108
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
lwi
Load Word Immediate
lwi
1
0
1
1
0
1
0
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号が拡張 さ れた IMM 内の値を加算 し た結果を ワ ー ド に揃え た
メ モリ ロ ケ ーシ ョ ン から ワ ード (16 ビ ッ ト ) を 読み込みま す。 データ は、レ ジ ス タ rD に格納さ れ
ま す。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
Addr[30:31] ← 00
(rD) ← Mem(Addr)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
109
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
mfs
Move From Special Purpose Register
mfs
1
0
0
0
1
0
1
rD
6
rD, rS
0
11
0
0
0
0
1
0
0
0
0
0
0
16
0
0
0
0
0
0
0
0 rS
31
説明
特殊用途の レ ジ ス タ rS の内容を レ ジ ス タ rD に コ ピー し ます。
擬似 コ ー ド
(rD) ← (rS)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
アセ ンブ リ 言語で特殊用途の レ ジ ス タ を参照す る には、 PC では rpc、 MSR では rmsr を使用 し て く
だ さ い。
110
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
msrclr
Read MSR and clear bits in MSR
msrclr
1
0
0
0
1
0
1
rD
6
rD, Imm
0
0
0
0
11
1
0
0
Imm14
16 17 18
31
説明
特殊用途の レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。 IMM 値が 1 であ る ビ ッ ト ポ ジ
シ ョ ンは、MSR で ク リ ア さ れます。 IMM 値が 0 であ る ビ ッ ト ポジシ ョ ンは、その ま ま にな り ます。
擬似 コ ー ド
(rD)
← (MSR)
(MSR) ← (MSR) ∧ (IMM))
変更 さ れる レ ジ ス タ
•
rD
•
MSR
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
こ の命令は、 C_USE_MSR_INSTR が MicroBlaze でセ ッ ト さ れてい る 場合のみ有効です。
即値は 2^14 以下にす る 必要があ り ます。 MSR の 18 ~ 31 ビ ッ ト のみを ク リ アで き ます。
こ の命令は、 バージ ョ ン 2.10.a 以上でのみ使用で き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
111
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
msrset
Read MSR and set bits in MSR
msrset
1
0
0
0
1
0
1
rD
6
rD, Imm
0
0
0
0
11
0
0
0
16
Imm14
18
31
説明
特殊用途の レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。
IMM 値が 1 であ る ビ ッ ト ポジ シ ョ ンは、 MSR でセ ッ ト さ れます。 IMM 値が 0 であ る ビ ッ ト ポ
ジシ ョ ンは、 その ま ま にな り ます。
擬似 コ ー ド
(rD)
← (MSR)
(MSR) ← (MSR) ∨
(IMM)
変更 さ れる レ ジ ス タ
•
rD
•
MSR
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
こ の命令は、 C_USE_MSR_INSTR が MicroBlaze でセ ッ ト さ れてい る 場合のみ有効です。
即値は 2^14 以下にす る 必要があ り ます。 MSR の 18 ~ 31 ビ ッ ト のみを セ ッ ト で き ます。
こ の命令は、 バージ ョ ン 2.10.a 以上でのみ使用で き ます。
112
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
mts
Move To Special Purpose Register
mts
1
0
0
0
1
0
1
0 0
rS, rA
0
0
0
6
rA
11
1
1
0
0
0
16
0
0
0
0
0
0
0
0
0
0 rS
31
説明
レ ジ ス タ rD の内容を MSR レ ジ ス タ に コ ピー し ます。
擬似 コ ー ド
(rS) ← (rA)
変更 さ れる レ ジ ス タ
•
rS
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
MTS 命令を使用 し て PC に書 き 込む こ と はで き ません。
MTS を使用 し て MSR に書 き 込む と 、MTS 命令を実行 し て 1 ク ロ ッ ク サ イ ク ル後にその値が反映
さ れます。
アセ ンブ リ 言語で特殊用途の レ ジ ス タ を参照す る には、 PC では rpc、 MSR では rmsr を使用 し て く
だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
113
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
mul
Multiply
mul
0
0
1
0
0
0
0
rD, rA, rB
rD
6
rA
rB
11
16
0
0
0
0
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rA お よ び rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 乗算
器では、 64 ビ ッ ト の結果が出 さ れ ます。 こ の値の最下位 ワ ー ド が rD に格納 さ れ ます。 最上位 ワ ー
ド は、 破棄 さ れます。
擬似 コ ー ド
(rD) ← LSW( (rA) × (rB) )
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
3 ク ロ ッ ク サイ クル
メモ
こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ にエンべデ ッ ド 乗算器が含 ま れてい る 場合にのみ有効
です。
114
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
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
レ イテンシ
3 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
こ の命令は、 タ ーゲ ッ ト アーキ テ ク チ ャ にエンべデ ッ ド 乗算器が含 ま れてい る 場合にのみ有効
です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
115
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
or
Logical OR
or
1
0
0
0
0
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
21
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容が OR を介 し て レ ジ ス タ rD に格納 さ れます。
擬似 コ ー ド
(rD) ← (rA) ∨
(rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
116
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
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) ∨
(IMM)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
117
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
put
0
0
1
put to fsl interface
1
0
1
1
put
rA, FSLx
put data to FSL x (blocking)
nput
rA, FSLx
put data to FSL x (non-blocking)
cput
rA, FSLx
put control to FSL x (blocking)
ncput
rA, FSLx
put control to FSL x (non-blocking)
0
0
0 0 0
6
rA
1
11
n
c
0
0
0
0
16
0
0
0
0
0
0
FSLx
29
31
説明
レ ジ ス タ rA の値を FSLx イ ン タ ーフ ェ イ ス に書 き 込みます。
put 命令は、 4 種類あ り ます。
ブ ロ ッ ク があ る 場合 (n ビ ッ ト が 0 の場合) は、FSL イ ン タ ーフ ェ イ ス に書 き 込むスペース があ る 間
MicroBlaze を中断 し ます。 ブ ロ ッ ク がない場合は、 MicroBlaze は中断 さ れず、 スペース があ る 場
合はキ ャ リ ーが 0 に、 スペース がない場合は 1 にセ ッ ト さ れます。
put お よ び nput 命令では、 FSL イ ン タ ーフ ェ イ スへの制御ビ ッ ト が 0 に、 cput お よ び ncput 命令
では 1 にセ ッ ト さ れます。
擬似 コ ー ド
(FSLx) ← (rA)
if (n = 1) then
MSR[Carry] ← (FSLx Full bit)
(FSLx Control bit) ← C
Registers Altered
•
MSR[Carry]
レ イテンシ
2 ク ロ ッ ク サイ ク ル (ブロ ッ ク な し 、 ま た は FSL イ ン タ ーフ ェ イ ス に書き 込むス ペース があ る 場
合) 。 ブ ロ ッ ク が あ る 場 合 は、 FSL イ ン タ ー フ ェ イ ス で 書 き 込む ス ペ ー ス が な く な る ま で
MicroBlaze が中断 し ます。
118
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
rsub
0
0
0
Arithmetic Reverse Subtract
0
K
rsub
rD, rA, rB
Subtract
rsubc
rD, rA, rB
Subtract with Carry
rsubk
rD, rA, rB
Subtract and Keep Carry
rsubkc
rD, rA, rB
Subtract with Carry and Keep Carry
C 1
rD
6
rA
11
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容が レ ジ ス タ rB の内容か ら 減算 さ れ、 その結果が レ ジ ス タ rD に格納 さ れます。
命令の ビ ッ ト 3 (図で K と 表記) は、 rsubk に対 し 1 にセ ッ ト さ れてい ます。 命令の ビ ッ ト 4 (図で
C と 表記) は、 rsubc に対 し 1 にセ ッ ト さ れてい ます。 両ビ ッ ト は、 rsubkc に対 し 1 にセ ッ ト さ れて
います。
rsub 命令でビ ッ ト 3 がセ ッ ト さ れてい る 場合 (rsubk、 rsubkc)、 キ ャ リ ー フ ラ グでは命令の実行後
の結果に関係せず既存の値が保持 さ れます。 ビ ッ ト 3 が ク リ ア さ れ る と (rsub、 rsubc)、 キ ャ リ ー フ
ラ グは命令の実行後の値が変更 さ れます。
ビ ッ ト 4 が 1 にセ ッ ト さ れ る と (rsubc、 rsubkc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行
に影響 し ます。 ビ ッ ト 4 が ク リ ア さ れ る と (rsub、 rsubk)、 キ ャ リ ー フ ラ グの内容は命令の実行に影
響 し ません (通常の加算が実行 さ れます)。
擬似 コ ー ド
if C = 0 then
(rD) ← (rB) + (rA) + 1
else
(rD) ←(rB) + (rA) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
減算式は、 キ ャ リ ー = ( ボ ロ ー ) にな り ます。 キ ャ リ ーが減算でセ ッ ト さ れてい る 場合、 ボ ロ ーがな
く 、 キ ャ リ ーが ク リ ア さ れてい る 場合は、 ボ ロ ーがあ る こ と を意味 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
119
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
rsubi
0
0
0
1
Arithmetic Reverse Subtract Immediate
K
rsubi
rD, rA, IMM
Subtract Immediate
rsubic
rD, rA, IMM
Subtract Immediate with Carry
rsubik
rD, rA, IMM
Subtract Immediate and Keep Carry
rsubikc
rD, rA, IMM
Subtract Immediate with Carry and Keep Carry
C 1
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容が 32 ビ ッ ト ま で符号拡張 さ れ る 、 IMM フ ィ ール ド の値か ら 減算 さ れ、 その結
果が レ ジ ス タ rD に格納 さ れます。 命令の ビ ッ ト 3 (図で K と 表記) は、 rsubik に対 し 1 にセ ッ ト さ
れてい ます。 命令の ビ ッ ト 4 (図で C と 表記) は、 rsubic に対 し 1 にセ ッ ト さ れてい ます。 両ビ ッ ト
は、 rsubikc に対 し 1 にセ ッ ト さ れてい ます。
rsubi 命令でビ ッ ト 3 がセ ッ ト さ れてい る 場合 (rsubik、 rsubikc)、 キ ャ リ ー フ ラ グでは命令の実行
後の結果に関係せず既存の値が保持 さ れます。 ビ ッ ト 3 が ク リ ア さ れ る と (rsubi、rsubic)、キ ャ リ ー
フ ラ グは命令の実行後の値が変更 さ れます。 ビ ッ ト 4 が 1 にセ ッ ト さ れ る と (rsubic、rsubikc)、キ ャ
リ ー フ ラ グ の内容 (MSR[C]) が命令 の実行に 影響 し ま す。 ビ ッ ト 4 が ク リ ア さ れ る と (rsubi、
rsubik)、 キ ャ リ ー フ ラ グの内容は命令の実行に影響 し ません (通常の加算が実行 さ れます)。
擬似 コ ー ド
if C = 0 then
(rD) ← sext(IMM) + (rA) + 1
else
(rD) ←sext(IMM) + (rA) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
減算式は、 キ ャ リ ー = ( ボ ロ ー ) にな り ます。 キ ャ リ ーが減算でセ ッ ト さ れてい る 場合はボ ロ ーがな
く 、 キ ャ リ ーが ク リ ア さ れてい る 場合は、 ボ ロ ーがあ る こ と を意味 し ます。
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
120
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
rtbd
Return from Break
rn from Interrupt
rtbd
1
0
0
1
1
0
1
1
0
rA, IMM
0
1
0
6
rA
11
IMM
16
31
説明
ブ レー ク か ら の戻 り 値が rA の内容 と 32 ビ ッ ト ま で符号拡張 さ れた IMM フ ィ ール ド を加算 し て指
定 さ れた ロ ケーシ ョ ンに分岐 し ます。 ま た、 実行後に MSR に含まれ る BIP を ク リ アにす る こ と で
ブ レー ク を イ ネーブルに し ます。
こ の命令には、 常に遅延ス ロ ッ ト があ り ます。 RTBD に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前に実
行 さ れます。 こ の遅延ス ロ ッ ト 命令では、 ブ レー ク がデ ィ ス エーブルに さ れます。
擬似 コ ー ド
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
MSR[BIP] ←0
変更 さ れる レ ジ ス タ
•
PC
•
MSR[BIP]
レ イテンシ
2 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
121
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
rtid
Return from Interrupt
rn from Interrupt
rtid
1
0
0
1
1
0
1
1
0
rA, IMM
0
0
1
6
rA
11
IMM
16
31
説明
割 り 込みか ら の戻 り 値が rA の内容 と 32 ビ ッ ト ま で符号拡張 さ れた IMM フ ィ ール ド を加算 し て指
定 さ れた ロ ケーシ ョ ンに分岐 し ます。 ま た、 実行後には割 り 込みが イ ネーブルに さ れます。
こ の命令には、 常に遅延ス ロ ッ ト があ り ます。 RTID に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前に実
行 さ れます。 こ の遅延ス ロ ッ ト 命令では、 割 り 込みがデ ィ ス エーブルに さ れます。
擬似 コ ー ド
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
MSR[IE] ←1
変更 さ れる レ ジ ス タ
•
PC
•
MSR[IE]
レ イテンシ
2 ク ロ ッ ク サイ クル
122
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
rtsd
Return from Subroutine
rtsd
1
0
0
1
1
0
1
1
0
rA, IMM
0
0
6
0
rA
11
IMM
16
31
説明
サブルーチンか ら の戻 り 値が rA の内容 と 32 ビ ッ ト ま で符号拡張 さ れた IMM フ ィ ール ド を加算 し
て指定 さ れた ロ ケーシ ョ ンに分岐 し ます。
こ の命令には、 常に遅延 ス ロ ッ ト があ り ます。 RTSD に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前に実
行 さ れます。
擬似 コ ー ド
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
2 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
123
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
sb
Store Byte
sb
1
0
1
0
1
0
0
rD, rA, rB
rD
6
rA
rB
11
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rD の LSB の内容を レ ジ ス タ rA と rB の内容を加算 し た結果の メ モ リ ロ ケーシ ョ ンに格
納 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
Mem(Addr) ←(rD)[24:31]
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
2 ク ロ ッ ク サイ クル
124
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
sbi
Store Byte Immediate
sbi
1
0
1
1
1
0
0
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値を加算 し た結果の メ モ リ ロ ケーシ ョ ンに レ
ジ ス タ rD の LSB の内容を格納 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
Mem(Addr) ←(rD)[24:31]
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
125
R
第 5 章 : 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 ク ロ ッ ク サイ クル
126
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
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 プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
127
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
sh
Store Halfword
sh
1
0
1
0
1
0
1
rD, rA, rB
rD
6
rA
rB
11
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rD の最下位ハーフ ワ ー ド の内容を レ ジ ス タ rA と rB の内容を加算 し た結果をハーフ ワ ー
ド に揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
Addr[31] ← 0
Mem(Addr) ←(rD)[16:31]
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
2 ク ロ ッ ク サイ クル
128
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
shi
Store Halfword Immediate
shi
1
0
1
1
1
0
1
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IIM の値を加算 し た結果をハーフ ワ ー ド に揃え た メ モ
リ ロ ケーシ ョ ンに レ ジ ス タ rD の最下位ハーフ ワ ー ド の内容を格納 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
Addr[31] ← 0
Mem(Addr) ←(rD)[16:31]
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
129
R
第 5 章 : 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 ク ロ ッ ク サイ クル
130
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
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 プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
131
R
第 5 章 : 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 に格納 さ れます。
ゼ ロ は、 シ フ ト チ ェ ーン にシ フ ト さ れ、 rD の MSB に配置 さ れ ます。 シ フ ト チ ェ ーンか ら 外れた
最下位ビ ッ ト は、 キ ャ リ ー フ ラ グに配置 さ れます。
擬似 コ ー ド
(rD)[0] ← 0
(rD)[1:31] ←(rA)[0:30]
MSR[C] ←(rA)[31]
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
132
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
sw
Store Word
sw
1
0
1
0
1
1
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 の内
容を格納 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
Addr[30:31] ← 00
Mem(Addr) ←(rD)[0:31]
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
2 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
133
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
swi
Store Word Immediate
swi
1
0
1
1
1
1
0
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IIM の値を 加算 し た結果 を ワ ー ド に揃え た メ モ リ ロ
ケーシ ョ ンに レ ジ ス タ rD の内容を格納 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
Addr[30:31] ← 00
Mem(Addr) ←(rD)[0:31]
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
134
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
wdc
Write to Data Cache
wdc
1
0
0
0
1
0
0
rA,rB
rA
6
rA
rB
11
16
0
0
0
0
1
1
0
0
1
0
0
31
説明
デー タ キ ャ ッ シ ュ タ グお よ びデー タ メ モ リ に書き 込みます。 レ ジ ス タ rB には、新 し いデー タ が格
納 さ れ ます。 レ ジ ス タ rA には、 デー タ ア ド レ ス が格納 さ れます。 rA の ビ ッ ト 30 は、 新 し い有効
ビ ッ ト で、 ビ ッ ト 31 は新 し い ロ ッ ク ビ ッ ト です。
こ の命令は、MSR レ ジ ス タ 内のデー タ キ ャ ッ シ ュ イ ネーブル ビ ッ ト を ク リ アにす る こ と でデー タ
キ ャ ッ シ ュ がデ ィ ス エーブルに さ れてい る と き のみ機能 し ます。
擬似 コ ー ド
(DCache Tag) ← (rA)
(DCache Data) ← (rB)
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
135
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
wic
Write to Instruction Cache
wic
1
0
0
0
1
0
0
rA,rB
rA
6
rA
rB
11
16
0
0
0
0
1
1
0
1
0
0
0
31
説明
命令キ ャ ッ シ ュ タ グお よ びデー タ メ モ リ に書 き 込みます。 レ ジ ス タ rB には、 新 し い命令デー タ が
格納 さ れ ます。 レ ジ ス タ rA には、 命令ア ド レ ス が格納 さ れ ま す。 rA の ビ ッ ト 30 は、 新 し い有効
ビ ッ ト で、 ビ ッ ト 31 は新 し い ロ ッ ク ビ ッ ト です。
こ の命令は、 MSR レ ジ ス タ 内の命令 キ ャ ッ シ ュ イ ネーブル ビ ッ ト を ク リ ア にす る こ と で命令
キ ャ ッ シ ュ がデ ィ ス エーブルに さ れてい る と き のみ機能 し ます。
擬似 コ ー ド
(ICache Tag) ← (rA)
(ICache Data) ← (rB)
変更 さ れる レ ジ ス タ
•
なし
レ イテンシ
1 ク ロ ッ ク サイ クル
136
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
R
命令
xor
Logical Exclusive OR
xor
1
0
0
0
0
1
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
21
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容が XOR を介 し て レ ジ ス タ rD に格納 さ れます。
擬似 コ ー ド
(rD) ← (rA) ⊕ (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日
www.xilinx.co.jp
137
R
第 5 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
xori
Logical Exclusive OR with Immediate
xori
1
0
0
1
0
1
0
rA, rD, IMM
rD
6
rA
IMM
11
16
31
説明
IMM フ ィ ール ド は、 0 を 16 ビ ッ ト 分左側に拡張す る こ と で 32 ビ ッ ト に拡張 さ れ ます。 レ ジ ス タ
rA の内容 と 拡張 さ れた IMM の内容が XOR を介 し て レ ジ ス タ rD に格納 さ れます。
擬似 コ ー ド
(rD) ← (rA) ⊕ sext(IMM)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B の命令では、 16 ビ ッ ト の IMM フ ィ ール ド が使用 さ れ、 その符号が拡
張 さ れ る と 32 ビ ッ ト ま でを即値オペ ラ ン ド と し て使用で き ます。 こ の符号拡張は、 タ イ プ B の命
令の前に IMM 命令を使用す る こ と で実行で き ます。 32 ビ ッ ト の即値の使用に関す る 詳細について
は、 IMM 命令を参照 し て く だ さ い。
138
www.xilinx.co.jp
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
EDK (v6.2) 2003 年 12 月 9 日