MicroBlaze プロセッサ リファレンス ガイド

MicroBlaze プ ロ セ ッ サ
リ フ ァ レンス ガイ ド
エ ンべデ ッ ド 開発キ ッ ト
EDK 11.4
UG081 (v10.3)
Xilinx is providing this product documentation, hereinafter “Information,” to you “AS IS” with no warranty of any kind, express
or implied. Xilinx makes no representation that the Information, or any particular implementation thereof, is free from any claims
of infringement. You are responsible for obtaining any rights you may require for any implementation based on the Information.
All specifications are subject to change without notice.
XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
INFORMATION OR ANY IMPLEMENTATION BASED THEREON, INCLUDING BUT NOT LIMITED TO ANY
WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
INFRINGEMENT AND ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
PURPOSE.
Except as stated herein, none of the Information may be copied, reproduced, distributed, republished, downloaded, displayed,
posted, or transmitted in any form or by any means including, but not limited to, electronic, mechanical, photocopying,
recording, or otherwise, without the prior written consent of Xilinx.
© 2009 Xilinx, Inc. XILINX, the Xilinx logo, Virtex, Spartan, ISE, and other designated brands included herein are trademarks
of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners.
本資料は英語版 (v.10.3) を翻訳 し た も ので、 内容に相違が生 じ る 場合には原文を優先 し ます。
資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。
日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
次の表に、 こ の文書の改訂履歴を示 し ます。
日付
バージ ョ ン
2002 年 10 月 1 日
1.0
EDK 3.1 リ リ ース
2003 年 3 月 11 日
2.0
EDK 3.2 リ リ ース
2003 年 9 月 24 日
3.0
EDK 6.1 リ リ ース
2004 年 2 月 20 日
3.1
EDK 6.2 リ リ ース
2004 年 8 月 24 日
4.0
EDK 6.3 リ リ ース
2004 年 9 月 21 日
4.1
EDK 6.3 サービ ス パ ッ ク 1 用に改訂
2004 年 11 月 18 日
4.2
EDK 6.3 サービ ス パ ッ ク 2 用に改訂
2005 年 1 月 20 日
5.0
EDK 7.1i リ リ ース
2005 年 4 月 2 日
5.1
EDK 7.1i サービ ス パ ッ ク 1 用に改訂
2005 年 5 月 9 日
5.2
EDK 7.1i サービ ス パ ッ ク 2 用に改訂
2005 年 10 月 5 日
5.3
EDK 8.1i 用に改訂
2006 年 2 月 21 日
5.4
EDK 8.1i サービ ス パ ッ ク 2 用に改訂
2006 年 6 月 1 日
6.0
EDK 8.2i リ リ ース
2006 年 7 月 24 日
6.1
EDK 8.2i サービ スパ ッ ク 1 用に改訂
2006 年 8 月 21 日
6.2
EDK 8.2i サービ スパ ッ ク 2 用に改訂
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
改訂内容
japan.xilinx.com
UG081 (v10.3)
日付
バージ ョ ン
2006 年 8 月 29 日
6.3
EDK 8.2i サービ スパ ッ ク 2 用に改訂
2006 年 9 月 15 日
7.0
EDK 9.1i リ リ ース
2007 年 2 月 22 日
7.1
EDK 9.1i サービ スパ ッ ク 1 用に改訂
2007 年 3 月 27 日
7.2
EDK 9.1i サービ スパ ッ ク 2 用に改訂
2007 年 6 月 25 日
8.0
EDK 9.2i リ リ ース
2008 年 1 月 17 日
9.0
EDK 10.1 リ リ ース
2008 年 3 月 4 日
9.1
EDK 10.1 サービ ス パ ッ ク 1 用に改訂
2008 年 5 月 14 日
9.2
EDK 10.1 サービ ス パ ッ ク 2 用に改訂
2008 年 7 月 14 日
9.3
EDK 10.1 サービ ス パ ッ ク 3 用に改訂
2009 年 2 月 4 日
10.0
EDK 11.1 リ リ ース
2009 年 4 月15 日
10.1
EDK 11.2 リ リ ース
2009 年 5 月 28 日
10.2
EDK 11.3 リ リ ース
2009 年 10 月 26 日
10.3
EDK 11.4 リ リ ース
UG081 (v10.3)
改訂内容
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
japan.xilinx.com
UG081 (v10.3)
目次
こ のマニ ュ アルについて
マニ ュ アルの内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
表記規則. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
書体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
オン ラ イ ン マニ ュ アル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
第 1 章 : MicroBlaze アーキテ ク チ ャ
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
デー タ型お よびエンデ ィ ア ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
イ ン ス ト ラ ク シ ョ ンの ま と め . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
セマ フ ォ の同期化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
汎用レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
特殊用途レ ジ ス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
パ イ プ ラ イ ン アーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3 段パ イ プ ラ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
5 段パ イ プ ラ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
分岐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
メ モ リ アーキ テ ク チ ャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
特権命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
仮想 メ モ リ 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
実モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
仮想モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
変換ル ッ ク アサ イ ド バ ッ フ ァ (TLB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
ア ク セ ス保護 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
UTLB 管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
ページ ア ク セ スお よびページ変更の記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
リ セ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
ハー ド ウ ェ ア例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
ブ レー ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
割 り 込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
ユーザー ベ ク タ (例外) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
命令キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
命令キ ャ ッ シ ュ の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
命令キ ャ ッ シ ュ の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
命令キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
デー タ キ ャ ッ シ ュ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
デー タ キ ャ ッ シ ュ の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
デー タ キ ャ ッ シ ュ の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
デー タ キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
浮動小数点ユニ ッ ト (FPU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
フ ォーマ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
繰 り 上げ/繰 り 下げ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
5
例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
ソ フ ト ウ ェ ア サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
ラ イ ブ ラ リ お よ びバ イ ナ リ の互換性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
オペレー タ レ イ テ ン シ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
C 言語のプ ロ グ ラ ミ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
高速シ ンプ レ ッ ク ス リ ン ク (FSL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
ハー ド ウ ェ ア ア ク セ ラ レー タへの FSL の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
デバ ッ グお よび ト レース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
デバ ッ グの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
ト レース の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
MicroBlaze I/O の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
プ ロ セ ッ サ ロ ーカル バス (PLB) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
オンチ ッ プ ペ リ フ ェ ラ ル バス (OPB) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
ローカル メ モ リ バス (LMB) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
LMB 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
LMB ト ラ ンザ ク シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
デー タ の読み出 し お よ び書 き込み操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
マ ス タ FSL 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
ス レーブ FSL 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
FSL ト ラ ンザ ク シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
直接 FSL 接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
ザ イ リ ン ク ス CacheLink (XCL) イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
CacheLink 信号の イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
CacheLink ト ラ ンザ ク シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
デバ ッ グ イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
ト レース イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
デー タ型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
レ ジ ス タ の使用規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
ス タ ッ ク の規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
呼び出 し 規則 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
メ モ リ モデル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
ス モール デー タ領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
デー タ 領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
共有の未初期化領域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
リ テ ラ ルま たは定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
割 り 込みお よび例外処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
表記法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
フ ォーマ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
このマニ ュ アルについて
こ のマニ ュ アルでは、 エンべデ ッ ド 開発キ ッ ト に含まれ る 32 ビ ッ ト
MicroBlaze™ のハー ド ウ ェ ア アーキ テ ク チ ャ について説明 し ます。
ソフ ト
プ ロ セ ッ サの
マニ ュ アルの内容
こ のマニ ュ アルは、 次の章か ら 構成 さ れてい ます。
•
第 1 章 「MicroBlaze アーキテ ク チ ャ 」 では、MicroBlaze の機能の概要に加え、ビ ッ グ エンデ ィ
ア ン形式、 32 ビ ッ ト の汎用レ ジ ス タ 、 キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト お よ び高速シ ンプ
レ ッ ク ス リ ン ク イ ン タ ーフ ェ イ ス の情報を説明 し ます。
•
第 2 章 「MicroBlaze の信号 イ ン タ ーフ ェ イ ス」 では、 MicroBlaze への接続に使用で き る信号
イ ン タ ーフ ェ イ ス の タ イ プを説明 し ます。
•
第 3 章 「MicroBlaze アプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI)」 では、 アセンブ リ 言
語で ソ フ ト プ ロ セ ッ サ用の ソ フ ト ウ ェ ア を開発す る 際に重要なアプ リ ケーシ ョ ン バ イ ナ リ イ
ン タ ーフ ェ イ ス について説明 し ます。
•
第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 には、 MicroBlaze の命令セ ッ ト アーキ テ ク
チ ャ の表記法、 フ ォーマ ッ ト 、 命令が記述 さ れてい ます。
その他の情報については、 http://japan.xilinx.com/support/mysupport.htm を参照 し て く だ さ い。 次
の表に、 リ ソ ース の一覧を示 し ます。 こ の リ ソ ース には、表示 さ れてい る URL か ら 直接ア ク セ ス で
き ます。
リ ソ ース
チ ュ ー ト リ アル
説明/URL
デザ イ ン入力か ら 検証やデバ ッ グ ま でのザ イ リ ン ク ス のデザ イ ン
ロ ーに ついて説明 し たチ ュ ー ト リ アルです。
フ
http://japan.xilinx.com/support/techsup/tutorials/index.htm
ア ンサー ブ ラ ウ ザ
ザ イ リ ン ク ス の ソ リ ュ ーシ ョ ン レ コー ド のデー タベース です。
http://japan.xilinx.com/xlnx/xil_ans_browser.jsp
アプ リ ケーシ ョ ン
ノー ト
デー タ シー ト
デバ イ ス別デザ イ ン技術お よ びアプ ロ ーチの説明です。
http://japan.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category
=Application+Notes
リ ー ド バ ッ ク 、バ ウ ン ダ リ ス キ ャ ン、 コ ン フ ィ ギ ュ レーシ ョ ン、 レ ン グ
ス カ ウ ン ト 、 デバ ッ グ な ど、 ザ イ リ ン ク ス デバ イ ス の特性に関す る 情
報がデバ イ ス別に記載 さ れてい ます。
http://japan.xilinx.com/xlnx/xweb/xil_publications_index.jsp
プ ロ ブ レ ム ソ ルバー
デザ イ ンの問題を ト ラ ブルシ ュー ト で き る対話型ツールです。
http://japan.xilinx.com/support/troubleshoot/psolvers.htm
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
7
こ のマニ ュ アルについて
リ ソ ース
テ ク ニ カル ヒ ン ト
説明/URL
ザ イ リ ン ク ス デザ イ ン環境についての最新ニ ュ ース、 デザ イ ンの
ヒ ン ト 、 パ ッ チ情報です。
http://japan.xilinx.com/xlnx/xil_tt_home.jsp
GNU マニ ュ アル
すべての GNU マニ ュ アルを入手で き ます。
http://www.gnu.org/manual
表記規則
こ のマニ ュ アルでは、 次の表記規則を使用 し てい ます。 各規則について、 例を挙げて説明 し ます。
書体
次の規則は、 すべてのマニ ュ アルで使用 さ れてい ます。
表記規則
使用箇所
例
Courier フ ォ ン ト
シ ス テ ム が表示す る メ ッ セージ、
プ ロ ンプ ト 、プ ロ グ ラ ム フ ァ イ ル speed grade: - 100
を表示 し ます。
Courier フ ォ ン ト
(太字)
構文内で入力す る コ マ ン ド を示 し
ます。
ngdbuild design_name
イタ リ ッ ク フォン ト
ユーザーが値を入力す る必要のあ
る構文内の変数に使用 し ます。
ngdbuild design_name
二重/一重かぎか っ こ
『 』、 「」
『 』 はマニ ュ アル名を、 「 」 はセ ク
シ ョ ン名を示 し ます。
詳細は、 『開発シ ス テ ム リ フ ァ レ
ン ス ガ イ ド 』 の 「PAR」 を参照 し
て く だ さ い。
角か っ こ [ ]
オプシ ョ ンの入力ま たはパ ラ メ ー
タ を示 し ますが、 bus[7:0] の よ
う な バ ス 仕様 で は必ず使用 し ま
す。ま た 、 GUI 表記にも 使用し ま
す。
[File] → [Open] を ク リ ッ ク し
ます。
中か っ こ { }
1 つ以上の項目を選択す る ための lowpwr ={on|off}
縦棒 |
選択す る リ ス ト の項目を分離 し ま
す。
リ ス ト を示 し ます。
縦の省略記号
.
.
.
横の省略記号 . . .
8
ngdbuild
[option_name]
design_name
繰 り 返 し 項目が省略 さ れてい る こ
と を示 し ます。
繰 り 返 し 項目が省略 さ れてい る こ
と を示 し ます。
japan.xilinx.com
lowpwr ={on|off}
IOB #1: Name = QOUT’
IOB #2: Name = CLKIN’
.
.
.
allow block
block_name loc1
loc2 ... locn;
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
表記規則
オ ン ラ イ ン マニ ュ アル
こ のマニ ュ アルでは、 次の規則が使用 さ れてい ます。
表記規則
青色の文字
青色の下線付 き 文字
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
使用箇所
マ ニ ュ ア ル内の相互参照 を 示 し
ます。
Web サ イ ト (URL) への
ハ イ パー リ ン ク です。
japan.xilinx.com
例
詳細は、 「その他の リ ソ ース」 を参
照 し て く だ さ い。
詳細については、第 1 章の 「 タ イ ト
ル フ ォーマ ッ ト 」 を参照 し て く だ
さ い。
最新の ス ピー ド
フ ァ イ ルは、
http://japan.xilinx.com か ら 入手で
き ます。
9
こ のマニ ュ アルについて
10
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
第1章
MicroBlaze アーキテ ク チ ャ
こ の章では MicroBlaze™ の機能の概要 と 、 ビ ッ グ エンデ ィ ア ン形式、 32 ビ ッ ト 汎用レ ジ ス タ、 仮
想 メ モ リ 管理、キ ャ ッ シ ュ ソ フ ト ウ ェ ア サポー ト 、高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ
イ ス を含む、 MicroBlaze アーキテ ク チ ャ の詳細な情報を説明 し ます。
こ の章は、 次のセ ク シ ョ ンか ら 構成 さ れてい ます。
•
概要
•
デー タ 型お よ びエンデ ィ ア ン
•
命令
•
レジス タ
•
パ イ プ ラ イ ン アーキテ ク チ ャ
•
メ モ リ アーキテ ク チ ャ
•
特権命令
•
仮想 メ モ リ 管理
•
リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク
•
命令キ ャ ッ シ ュ
•
デー タ キ ャ ッ シ ュ
•
浮動小数点ユニ ッ ト (FPU)
•
ソ フ ト ウ ェ ア サポー ト
•
高速シ ンプ レ ッ ク ス リ ン ク (FSL)
•
デバ ッ グお よ び ト レース
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
11
第 1 章 : MicroBlaze アーキテ ク チ ャ
概要
MicroBlaze エンべデ ッ ド プ ロ セ ッ サ ソ フ ト コ アは、 ザ イ リ ン ク ス FPGA での イ ンプ リ メ ン テー
シ ョ ン向けに最適化 さ れた RISC (Reduced Instruction Set Computer) です。 図 1-1 に、 MicroBlaze
コ アの フ ァ ン ク シ ョ ン ブ ロ ッ ク 図を示 し ます。
命令側
バス イ ン タ ー フ ェ イ ス
デー タ 側
バス イ ン タ ー フ ェ イ ス
MMU (Memory Management Unit)
UTLB
ITLB
IXCL_S
ALU
プログラム
カウン タ
シフ ト
特殊用途
レジス タ
バレル シ フ ト
デー タ キ ャ ッ シ ュ
命令キ ャ ッ シ ュ
IXCL_M
DTLB
乗算器
IPLB
DXCL_M
DXCL_S
DPLB
除算器
IOPB
FPU
バス
バス
命令
バッ フ ァ
IF
ILMB
DOPB
IF
DLMB
命令
デコー ド
MFSL 0..15
ま たは
レ ジ ス タ フ ァ イル
32 X 32b
DWSFL 0..15
SFSL 0..15
または
オプ シ ョ ンの機能
DRSFL 0..15
図 1-1 : MicroBlaze コ アのブ ロ ッ ク 図
機能
MicroBlaze は、 柔軟に コ ン フ ィ ギ ュ レーシ ョ ン可能な ソ フ ト コ ア プ ロ セ ッ サで、 デザ イ ンの要件
に応 じ て機能を選択で き ます。
MicroBlaze プ ロ セ ッ サの機能は、 次の と お り です。
•
32 個の 32 ビ ッ ト 汎用レ ジ ス タ
•
3 個のオペ ラ ン ド お よ び 2 個のア ド レ ス指定モー ド のあ る 32 ビ ッ ト 命令ワ ー ド
•
32 ビ ッ ト ア ド レ ス バ ス
•
単一パ イ プ ラ イ ン
こ れ ら の機能に加え、選択可能なオプシ ョ ンの機能があ り ます。以前のバージ ョ ンの MicroBlaze で
は、 こ こ に示す機能の一部のみがサポー ト さ れます。 オプシ ョ ンの機能がすべてサポー ト さ れてい
る のは、 最新バージ ョ ンの MicroBlaze (v7.20) のみです。
新規デザ イ ンには、 最新バージ ョ ンの MicroBlaze プ ロ セ ッ サを使用す る こ と をお勧め し ます。
13 ページの表 1-1 に、Microblaze の各バージ ョ ンで コ ン フ ィ ギ ュ レ シ ョ ン可能な機能の概要を示 し
ます。
12
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
概要
表 1-1 : MicroBlaze のオプ シ ョ ン機能
MicroBlaze のバージ ョ ン
機能
v4.00
v5.00
v6.00
v7.00
v7.10
v7.20
廃止予定
廃止予定
廃止予定
廃止予定
推奨
推奨
3
5
3/5
3/5
3/5
3/5
オンチ ッ プ ペ リ フ ェ ラ ル バス (OPB)
デー タ側 イ ン ターフ ェ イ ス
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オンチ ッ プ ペ リ フ ェ ラ ル バス (OPB)
命令側 イ ン ターフ ェ イ ス
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ローカル メ モ リ バス (LMB) デー タ 側
イ ン ターフ ェ イ ス
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ローカル メ モ リ バス (LMB) 命令側
イ ン ターフ ェ イ ス
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア バレ ル シ フ タ
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア除算器
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
0~7
0~7
0~7
0 ~ 15
0 ~ 15
0 ~ 15
マシ ン ス テー タ ス設定お よ び ク リ ア命令
オプシ ョ ン
あり
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
IOPB イ ン タ ーフ ェ イ ス の命令キ ャ ッ シ ュ
オプシ ョ ン
なし
なし
なし
なし
なし
IOPB イ ン タ ーフ ェ イ ス のデー タ
オプシ ョ ン
なし
なし
なし
なし
なし
CacheLink (IXCL) の命令キ ャ ッ シ ュ
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
CacheLink (DXCL) のデー タ キ ャ ッ シ ュ
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
4
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア例外サポー ト
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
パ ターン比較命令
オプシ ョ ン
あり
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
浮動小数点ユニ ッ ト (FPU)
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア乗算器をデ ィ ス エーブルに
する1
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア デバ ッ グで読み出 し 可能な
ESR お よ び EAR
あり
あり
あり
あり
あり
あり
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (PVR)
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
エ リ ア ま たはス ピー ド の最適化
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
ハー ド ウ ェ ア乗算器の 64 ビ ッ ト の結果
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
バージ ョ ンの ス テー タ ス
プ ロ セ ッ サ パ イ プ ラ イ ンの段数
高速シ ンプ レ ッ ク ス リ ン ク (FSL)
イ ン ターフ ェ イ ス
キャ ッシュ
XCL の 4 ま たは 8 ワ ー ド のキ ャ ッ シ ュ
ライン
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
13
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-1 : MicroBlaze のオプ シ ョ ン機能 (続き )
MicroBlaze のバージ ョ ン
機能
v4.00
v5.00
v6.00
v7.00
v7.10
v7.20
LUT キ ャ ッ シ ュ メ モ リ
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
プ ロ セ ッ サ ロ ーカル バス (PLB) デー タ 側
イ ン ターフ ェ イ ス
-
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
プ ロ セ ッ サ ロ ーカル バス (PLB) 命令側
イ ン ターフ ェ イ ス
-
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
浮動小数点変換お よび平方根命令
-
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
MMU (Memory Management Unit)
-
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
拡張高速シ ンプ レ ッ ク ス リ ン ク (FSL)
命令
-
-
-
オプシ ョ ン
オプシ ョ ン
オプシ ョ ン
すべての命令キ ャ ッ シ ュ メ モ リ ア ク セ ス
へのザ イ リ ン ク ス Cache Link の使用
-
-
-
-
オプシ ョ ン
オプシ ョ ン
すべてのデー タ キ ャ ッ シ ュ メ モ リ ア ク セ
スへのザ イ リ ン ク ス Cache Link の使用
-
-
-
-
オプシ ョ ン
オプシ ョ ン
デー タ キ ャ ッ シ ュ の ラ イ ト バ ッ ク キ ャ ッ
シ ュ ポ リ シーの使用
-
-
-
-
-
オプシ ョ ン
命令キ ャ ッ シ ュ の Cache Link (IXCL)
プロ ト コル
-
-
-
-
-
オプシ ョ ン
デー タ キ ャ ッ シ ュ の Cache Link (DXCL)
プロ ト コル
-
-
-
-
-
オプシ ョ ン
1. Virtex®-4 以降の フ ァ ミ リ で、 MUL18 お よ び DSP48 プ リ ミ テ ィ ブを節約す る ために使用。
デー タ 型およびエ ンデ ィ ア ン
MicroBlaze では、 デー タ の記述に ビ ッ グ エンデ ィ ア ン形式を使用 し ます。 MicroBlaze に対 し ハー
ド ウ ェ アでサポー ト さ れ るデー タ 型は、 ワ ー ド 、 ハーフ ワ ー ド 、 お よ びバ イ ト です。 各デー タ 型に
対す る ビ ッ ト お よ びバ イ ト 構成を次の表に示 し ます。
表 1-2 : ワー ド デー タ 型
14
バイ ト ア ド レ ス
n
n+1
n+2
n+3
バ イ ト 表記
0
1
2
3
バイ ト 順
MSByte
LSByte
ビ ッ ト 表現
0
31
ビッ ト順
MSBit
LSBit
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 1-3 : ハー フ ワー ド デー タ 型
バイ ト ア ド レ ス
n
n+1
バ イ ト 表記
0
1
バイ ト 順
MSByte
LSByte
ビ ッ ト 表現
0
15
ビッ ト順
MSBit
LSBit
表 1-4 : バイ ト デー タ 型
バイ ト ア ド レ ス
n
ビ ッ ト 表現
0
7
ビッ ト順
MSBit
LSBit
命令
イ ン ス ト ラ ク シ ョ ンのま と め
MicroBlaze の命令は、 すべて 32 ビ ッ ト で、 タ イ プ A と タ イ プ B のいずれか と し て定義 さ れます。
タ イ プ A の命令には、最大 2 個の ソ ース レ ジ ス タ オペ ラ ン ド と 1 個のデス テ ィ ネーシ ョ ン レ ジ ス
タ オペ ラ ン ド を含め る こ と がで き ます。 タ イ プ B の命令には、1 個の ソ ース レ ジ ス タ オペ ラ ン ド と
16 ビ ッ ト の即値オペ ラ ン ド が含ま れます。 こ の 16 ビ ッ ト の即値オペ ラ ン ド は、 タ イ プ B 命令の前
に imm 命令を付け る と 、 32 ビ ッ ト ま で拡張可能です。 タ イ プ B の命令には、 1 個のデス テ ィ ネー
シ ョ ン レ ジ ス タ オペ ラ ン ド が含まれます。 命令の フ ァ ン ク シ ョ ンは、 演算、 論理、 分岐、 読み込み
/格納、 特殊に分類 さ れます。 表 1-6 に MicroBlaze の命令セ ッ ト を示 し ます。 こ れ ら の命令の詳細
は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。 表 1-5 に、 各命令の
セマ ン テ ィ ク ス で使用 さ れ る命令セ ッ ト の用語を説明 し ます。
表 1-5 : 命令セ ッ ト の用語
シ ンボル
説明
Ra
R0 ~ R31、 汎用レ ジ ス タ 、 ソ ース オペ ラ ン ド a
Rb
R0 ~ R31、 汎用レ ジ ス タ 、 ソ ース オペ ラ ン ド b
Rd
R0 ~ R31、 汎用レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド
SPR[x]
特殊用途レ ジ ス タ (x はレ ジ ス タ番号)
MSR
マシ ン ス テー タ ス レ ジ ス タ = SPR[1]
ESR
例外ス テー タ ス レ ジ ス タ = SPR[5]
EAR
例外ア ド レ ス レ ジ ス タ = SPR[3]
FSR
浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ = SPR[7]
PVRx
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (x はレ ジ ス タ 番号 = SPR[8192 + x] )
BTR
分岐 タ ーゲ ッ ト レ ジ ス タ = SPR[11]
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
15
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-5 : 命令セ ッ ト の用語 (続き )
シ ンボル
説明
PC
実行段プ ロ グ ラ ム カ ウ ン タ = SPR[0]
x[y]
レジ ス タ x のビ ッ ト y
x[y:z]
レジ ス タ x のビ ッ ト y ~ z
x
レ ジ ス タ x の ビ ッ ト 反転値
Imm
16 ビ ッ ト の即値
Immx
x ビ ッ ト の即値
FSLx
4 ビ ッ ト の高速シ ンプ レ ッ ク ス リ ン ク (FSL) ポー ト 識別子 (x はポー ト 番号)
C
キ ャ リ ー フ ラ グ、 MSR[29]
Sa
特殊用途レ ジ ス タ 、 ソ ース オペ ラ ン ド
Sd
特殊用途レ ジ ス タ 、 デス テ ィ ネーシ ョ ン オペ ラ ン ド
s(x)
符号拡張引数 x (最大 32 ビ ッ ト )
*Addr
ロ ケーシ ョ ン Addr にあ る メ モ リ 内容 (デー タ サ イ ズ揃え )
:=
代入演算子
=
等号
!=
非等価
>
大な り
>=
以上
<
小な り
<=
以下
+
加算
*
乗算
/
除算
>> x
右に x ビ ッ ト シ フ ト
<< x
左に x ビ ッ ト シ フ ト
and
論理積 (AND)
or
論理和 (OR)
xor
排他的論理和 (XOR)
op1 if cond else op2
条件文 cond が真の場合は op1 を実行、 それ以外は op2 を実行
&
連結。 た と えば、 「0000100 & Imm7」 は固定フ ィ ール ド 0000100 と 7 ビ ッ ト の即値を連結 し た も
のです。
signed
符号付 き 整数デー タ 型に対 し て実行 さ れ る 演算。 すべての四則演算は、 指定がない限 り 符号付 き
の ワー ド オペ ラ ン ド で実行 さ れます。
16
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 1-5 : 命令セ ッ ト の用語 (続き )
シ ンボル
説明
unsigned
符号な し 整数デー タ 型に対 し て実行 さ れ る演算
float
浮動小数点デー タ 型に対 し て実行 さ れ る演算
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
17
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-6 : MicroBlaze の命令セ ッ ト の一覧
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
21 ~ 31
セマ ン テ ィ ク ス
16 ~ 31
ADD Rd,Ra,Rb
000000
Rd
Ra
Rb
00000000000
Rd := Rb + Ra
RSUB Rd,Ra,Rb
000001
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + 1
ADDC Rd,Ra,Rb
000010
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + C
RSUBC Rd,Ra,Rb
000011
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + C
ADDK Rd,Ra,Rb
000100
Rd
Ra
Rb
00000000000
Rd := Rb + Ra
RSUBK Rd,Ra,Rb
000101
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + 1
ADDKC Rd,Ra,Rb
000110
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + C
RSUBKC Rd,Ra,Rb
000111
Rd
Ra
Rb
00000000000
Rd := Rb + Ra + C
CMP Rd,Ra,Rb
000101
Rd
Ra
Rb
00000000001
Rd := Rb + Ra + 1
Rd[0] := 0 if (Rb >= Ra) else
Rd[0] := 1
CMPU Rd,Ra,Rb
000101
Rd
Ra
ADDI Rd,Ra,Imm
001000
Rd
RSUBI Rd,Ra,Imm
001001
ADDIC Rd,Ra,Imm
00000000011
Rd := Rb + Ra + 1 (unsigned)
Rd[0] := 0 if (Rb >= Ra, unsigned) else
Rd[0] := 1
Ra
Imm
Rd := s(Imm) + Ra
Rd
Ra
Imm
Rd := s(Imm) + Ra + 1
001010
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
RSUBIC Rd,Ra,Imm
001011
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
ADDIK Rd,Ra,Imm
001100
Rd
Ra
Imm
Rd := s(Imm) + Ra
RSUBIK Rd,Ra,Imm
001101
Rd
Ra
Imm
Rd := s(Imm) + Ra + 1
ADDIKC Rd,Ra,Imm
001110
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
RSUBIKC Rd,Ra,Imm
001111
Rd
Ra
Imm
Rd := s(Imm) + Ra + C
MUL Rd,Ra,Rb
010000
Rd
Ra
Rb
00000000000
Rd := Ra * Rb
MULH Rd,Ra,Rb
010000
Rd
Ra
Rb
00000000001
Rd := (Ra * Rb) >> 32 (signed)
MULHU Rd,Ra,Rb
010000
Rd
Ra
Rb
00000000011
Rd := (Ra * Rb) >> 32 (unsigned)
MULHSU Rd,Ra,Rb
010000
Rd
Ra
Rb
00000000010
Rd := (Ra, signed * Rb, unsigned) >> 32
(signed)
BSRA Rd,Ra,Rb
010001
Rd
Ra
Rb
01000000000
Rd := s(Ra >> Rb)
BSLL Rd,Ra,Rb
010001
Rd
Ra
Rb
10000000000
Rd := (Ra << Rb) & 0
MULI Rd,Ra,Imm
011000
Rd
Ra
Imm
Rd := Ra * s(Imm)
BSRLI Rd,Ra,Imm
011001
Rd
Ra
00000000000 & Imm5
18
Rb
japan.xilinx.com
Rd : = 0 & (Ra >> Imm5)
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
21 ~ 31
セマ ン テ ィ ク ス
16 ~ 31
BSRAI Rd,Ra,Imm
011001
Rd
Ra
00000010000 & Imm5
Rd := s(Ra >> Imm5)
BSLLI Rd,Ra,Imm
011001
Rd
Ra
00000100000 & Imm5
Rd := (Ra << Imm5) & 0
IDIV Rd,Ra,Rb
010010
Rd
Ra
Rb
00000000000
Rd := Rb/Ra
IDIVU Rd,Ra,Rb
010010
Rd
Ra
Rb
00000000010
Rd := Rb/Ra, unsigned
TNEAGETD Rd,Rb
010011
Rd
00000
Rb
0N0TAE
00000
Rd := FSL Rb[28:31] (デー タ 読み出 し )
MSR[FSL] := 1 if (FSL_S_Control = 1)
MSR[C] := not FSL_S_Exists if N = 1
TNAPUTD Ra,Rb
010011
00000
Ra
Rb
0N0TA0
00000
FSL Rb[28:31] := Ra (デー タ 書 き 込み)
MSR[C] := FSL_M_Full if N = 1
TNECAGETD Rd,Rb
010011
Rd
00000
Rb
0N1TAE
00000
Rd := FSL Rb[28:31] (制御読み出 し )
MSR[FSL] := 1 if (FSL_S_Control = 0)
MSR[C] := not FSL_S_Exists if N = 1
TNCAPUTD Ra,Rb
010011
00000
Ra
Rb
0N1TA0
00000
FSL Rb[28:31] := Ra (制御書 き込み)
MSR[C] := FSL_M_Full if N = 1
FADD Rd,Ra,Rb
010110
Rd
Ra
Rb
00000000000
Rd := Rb+Ra, float1
FRSUB Rd,Ra,Rb
010110
Rd
Ra
Rb
00010000000
Rd := Rb-Ra, float1
FMUL Rd,Ra,Rb
010110
Rd
Ra
Rb
00100000000
Rd := Rb*Ra, float1
FDIV Rd,Ra,Rb
010110
Rd
Ra
Rb
00110000000
Rd := Rb/Ra, float1
FCMP.UN Rd,Ra,Rb
010110
Rd
Ra
Rb
01000000000
Rd := 1 if (Rb = NaN or Ra = NaN, float1)
else
Rd := 0
FCMP.LT Rd,Ra,Rb
010110
Rd
Ra
Rb
01000010000
Rd := 1 if (Rb < Ra, float1) else
Rd := 0
FCMP.EQ Rd,Ra,Rb
010110
Rd
Ra
Rb
01000100000
Rd := 1 if (Rb = Ra, float1) else
Rd := 0
FCMP.LE Rd,Ra,Rb
010110
Rd
Ra
Rb
01000110000
Rd := 1 if (Rb <= Ra, float1) else
Rd := 0
FCMP.GT Rd,Ra,Rb
010110
Rd
Ra
Rb
01001000000
Rd := 1 if (Rb > Ra, float1) else
Rd := 0
FCMP.NE Rd,Ra,Rb
010110
Rd
Ra
Rb
01001010000
Rd := 1 if (Rb != Ra, float1) else
Rd := 0
FCMP.GE Rd,Ra,Rb
010110
Rd
Ra
Rb
01001100000
Rd := 1 if (Rb >= Ra, float1) else
Rd := 0
FLT Rd,Ra
010110
Rd
Ra
0
01010000000
Rd := float (Ra)1
FINT Rd,Ra
010110
Rd
Ra
0
01100000000
Rd := int (Ra)1
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
19
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
21 ~ 31
セマ ン テ ィ ク ス
16 ~ 31
010110
Rd
Ra
TNEAGET Rd,FSLx
011011
Rd
00000
0N0TAE000000 &
FSLx
Rd := FSLx (デー タ 読み出 し 、 N = 0 の場合
ブ ロ ッ キ ン グ)
MSR[FSL] := 1 if (FSLx_S_Control = 1)
MSR[C] := not FSLx_S_Exists if N = 1
TNAPUT Ra,FSLx
011011
00000
Ra
1N0TA0000000 &
FSLx
FSLx := Ra (デー タ 書 き込み、 N = 0 の場合
ブ ロ ッ キ ン グ)
MSR[C] := FSLx_M_Full if N = 1
TNECAGET Rd,FSLx
011011
Rd
00000
0N1TAE000000 &
FSLx
Rd := FSLx (制御読み出 し 、 N = 0 の場合ブ
ロ ッ キ ン グ)
MSR[FSL] := 1 if (FSLx_S_Control = 0)
MSR[C] := not FSLx_S_Exists if N = 1
TNCAPUT Ra,FSLx
011011
00000
Ra
1N1TA0000000 &
FSLx
FSLx := Ra (制御書 き込み、 N = 0 の場合ブ
ロ ッ キ ン グ)
MSR[C] := FSLx_M_Full if N = 1
OR Rd,Ra,Rb
100000
Rd
Ra
Rb
00000000000
Rd := Ra or Rb
AND Rd,Ra,Rb
100001
Rd
Ra
Rb
00000000000
Rd := Ra and Rb
XOR Rd,Ra,Rb
100010
Rd
Ra
Rb
00000000000
Rd := Ra xor Rb
ANDN Rd,Ra,Rb
100011
Rd
Ra
Rb
00000000000
Rd := Ra and Rb
PCMPBF Rd,Ra,Rb
100000
Rd
Ra
Rb
10000000000
Rd := 1 if (Rb[0:7] = Ra[0:7]) else
Rd := 2 if (Rb[8:15] = Ra[8:15]) else
Rd := 3 if (Rb[16:23] = Ra[16:23]) else
Rd := 4 if (Rb[24:31] = Ra[24:31]) else
Rd := 0
PCMPEQ Rd,Ra,Rb
100010
Rd
Ra
Rb
10000000000
Rd := 1 if (Rd = Ra) else
Rd := 0
PCMPNE Rd,Ra,Rb
100011
Rd
Ra
Rb
10000000000
Rd := 1 if (Rd != Ra) else
Rd := 0
SRA Rd,Ra
100100
Rd
Ra
0000000000000001
Rd := s(Ra >> 1)
C := Ra[31]
SRC Rd,Ra
100100
Rd
Ra
0000000000100001
Rd := C & (Ra >> 1)
C := Ra[31]
SRL Rd,Ra
100100
Rd
Ra
0000000001000001
Rd := 0 & (Ra >> 1)
C := Ra[31]
SEXT8 Rd,Ra
100100
Rd
Ra
0000000001100000
Rd := s(Ra[24:31])
SEXT16 Rd,Ra
100100
Rd
Ra
0000000001100001
Rd := s(Ra[16:31])
20
0
01110000000
Rd := sqrt (Ra)1
FSQRT Rd,Ra
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
WIC Ra,Rb
21 ~ 31
セマ ン テ ィ ク ス
100100
00000
Ra
16 ~ 31
Rb
01101000
ICache_Line[Ra >> 4].Tag := 0 if
(C_ICACHE_LINE_LEN = 4)
ICache_Line[Ra >> 5].Tag := 0 if
(C_ICACHE_LINE_LEN = 8)
WDC Ra,Rb
100100
00000
Ra
Rb
01100100
キ ャ ッ シ ュ ラ イ ンが ク リ ア さ れ、 格納デー
タ が廃棄 さ れます。
DCache_Line[Ra >> 4].Tag := 0 if
(C_DCACHE_LINE_LEN = 4)
DCache_Line[Ra >> 5].Tag := 0 if
(C_DCACHE_LINE_LEN = 8)
WDC.FLUSH Ra,Rb
100100
00000
Ra
Rb
01100100
キ ャ ッ シ ュ ラ イ ンが フ ラ ッ シ ュ さ れ、 格納
デー タ が メ モ リ に書 き込まれてか ら ク リ ア
さ れます。
D_DCACHE_USE_WRITEBACK = 1 の と
き に使用。
WDC.CLEAR Ra,Rb
100100
00000
Ra
Rb
01100100
ア ド レ ス が一致す る キ ャ ッ シ ュ ラ イ ンが ク
リ ア さ れ、 格納デー タ が破棄 さ れます。
D_DCACHE_USE_WRITEBACK = 1 の と
き に使用。
MTS Sd,Ra
100101
00000
Ra
11 & Sd
SPR[Sd] := Ra
• SPR[0x0001] は MSR
• SPR[0x0007] は FSR
• SPR[0x1000] は PID
• SPR[0x1001] は ZPR
• SPR[0x1002] は TLBX
• SPR[0x1003] は TLBLO
• SPR[0x1004] は TLBHI
• SPR[0x1005] は TLBSX
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
21
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
MFS Rd,Sa
21 ~ 31
セマ ン テ ィ ク ス
100101
Rd
16 ~ 31
00000
10 & Sa
Rd := SPR[Sa]
• SPR[0x0000] は PC
• SPR[0x0001] は MSR
• SPR[0x0003] は EAR
• SPR[0x0005] は ESR
• SPR[0x0007] は FSR
• SPR[0x000B] は BTR
• SPR[0x000D] は EDR
• SPR[0x1000] は PID
• SPR[0x1001] は ZPR
• SPR[0x1002] は TLBX
• SPR[0x1003] は TLBLO
• SPR[0x1004] は TLBHI
• SPR[0x2000] ~ SPR [0x200B] は
PVR[0] ~ PVR [11]
MSRCLR Rd,Imm
100101
Rd
00001
00 & Imm14
Rd := MSR
MSR := MSR and Imm14
MSRSET Rd,Imm
100101
Rd
00000
00 & Imm14
Rd := MSR
MSR := MSR or Imm14
BR Rb
100110
00000
00000
Rb
00000000000
PC := PC + Rb
BRD Rb
100110
00000
10000
Rb
00000000000
PC := PC + Rb
BRLD Rd,Rb
100110
Rd
10100
Rb
00000000000
PC := PC + Rb
Rd := PC
BRA Rb
100110
00000
01000
Rb
00000000000
PC := Rb
BRAD Rb
100110
00000
11000
Rb
00000000000
PC := Rb
BRALD Rd,Rb
100110
Rd
11100
Rb
00000000000
PC := Rb
Rd := PC
BRK Rd,Rb
100110
Rd
01100
Rb
00000000000
PC := Rb
Rd := PC
MSR[BIP] := 1
BEQ Ra,Rb
100111
00000
Ra
Rb
00000000000
PC := PC + Rb if Ra = 0
BNE Ra,Rb
100111
00001
Ra
Rb
00000000000
PC := PC + Rb if Ra != 0
BLT Ra,Rb
100111
00010
Ra
Rb
00000000000
PC := PC + Rb if Ra < 0
BLE Ra,Rb
100111
00011
Ra
Rb
00000000000
PC := PC + Rb if Ra <= 0
BGT Ra,Rb
100111
00100
Ra
Rb
00000000000
PC := PC + Rb if Ra > 0
BGE Ra,Rb
100111
00101
Ra
Rb
00000000000
PC := PC + Rb if Ra >= 0
22
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
21 ~ 31
セマ ン テ ィ ク ス
16 ~ 31
BEQD Ra,Rb
100111
10000
Ra
Rb
00000000000
PC := PC + Rb if Ra = 0
BNED Ra,Rb
100111
10001
Ra
Rb
00000000000
PC := PC + Rb if Ra != 0
BLTD Ra,Rb
100111
10010
Ra
Rb
00000000000
PC := PC + Rb if Ra < 0
BLED Ra,Rb
100111
10011
Ra
Rb
00000000000
PC := PC + Rb if Ra <= 0
BGTD Ra,Rb
100111
10100
Ra
Rb
00000000000
PC := PC + Rb if Ra > 0
BGED Ra,Rb
100111
10101
Ra
Rb
00000000000
PC := PC + Rb if Ra >= 0
ORI Rd,Ra,Imm
101000
Rd
Ra
Imm
Rd := Ra or s(Imm)
ANDI Rd,Ra,Imm
101001
Rd
Ra
Imm
Rd := Ra and s(Imm)
XORI Rd,Ra,Imm
101010
Rd
Ra
Imm
Rd := Ra xor s(Imm)
ANDNI Rd,Ra,Imm
101011
Rd
Ra
Imm
Rd := Ra and s(Imm)
IMM Imm
101100
00000
00000
Imm
Imm[0:15] := Imm
RTSD Ra,Imm
101101
10000
Ra
Imm
PC := Ra + s(Imm)
RTID Ra,Imm
101101
10001
Ra
Imm
PC := Ra + s(Imm)
MSR[IE] := 1
RTBD Ra,Imm
101101
10010
Ra
Imm
PC := Ra + s(Imm)
MSR[BIP] := 0
RTED Ra,Imm
101101
10100
Ra
Imm
PC := Ra + s(Imm)
MSR[EE] := 1, MSR[EIP] := 0
ESR := 0
BRI Imm
101110
00000
00000
Imm
PC := PC + s(Imm)
BRID Imm
101110
00000
10000
Imm
PC := PC + s(Imm)
BRLID Rd,Imm
101110
Rd
10100
Imm
PC := PC + s(Imm)
Rd := PC
BRAI Imm
101110
00000
01000
Imm
PC := s(Imm)
BRAID Imm
101110
00000
11000
Imm
PC := s(Imm)
BRALID Rd,Imm
101110
Rd
11100
Imm
PC := s(Imm)
Rd := PC
BRKI Rd,Imm
101110
Rd
01100
Imm
PC := s(Imm)
Rd := PC
MSR[BIP] := 1
BEQI Ra,Imm
101111
00000
Ra
Imm
PC := PC + s(Imm) if Ra = 0
BNEI Ra,Imm
101111
00001
Ra
Imm
PC := PC + s(Imm) if Ra != 0
BLTI Ra,Imm
101111
00010
Ra
Imm
PC := PC + s(Imm) if Ra < 0
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
23
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
21 ~ 31
セマ ン テ ィ ク ス
16 ~ 31
BLEI Ra,Imm
101111
00011
Ra
Imm
PC := PC + s(Imm) if Ra <= 0
BGTI Ra,Imm
101111
00100
Ra
Imm
PC := PC + s(Imm) if Ra > 0
BGEI Ra,Imm
101111
00101
Ra
Imm
PC := PC + s(Imm) if Ra >= 0
BEQID Ra,Imm
101111
10000
Ra
Imm
PC := PC + s(Imm) if Ra = 0
BNEID Ra,Imm
101111
10001
Ra
Imm
PC := PC + s(Imm) if Ra != 0
BLTID Ra,Imm
101111
10010
Ra
Imm
PC := PC + s(Imm) if Ra < 0
BLEID Ra,Imm
101111
10011
Ra
Imm
PC := PC + s(Imm) if Ra <= 0
BGTID Ra,Imm
101111
10100
Ra
Imm
PC := PC + s(Imm) if Ra > 0
BGEID Ra,Imm
101111
10101
Ra
Imm
PC := PC + s(Imm) if Ra >= 0
LBU Rd,Ra,Rb
110000
Rd
Ra
Rb
00000000000
Addr := Ra + Rb
Rd[0:23] := 0
Rd[24:31] := *Addr[0:7]
LHU Rd,Ra,Rb
110001
Rd
Ra
Rb
00000000000
Addr := Ra + Rb
Rd[0:15] := 0
Rd[16:31] := *Addr[0:15]
LW Rd,Ra,Rb
110010
Rd
Ra
Rb
00000000000
Addr := Ra + Rb
Rd := *Addr
LWX Rd,Ra,Rb
110010
Rd
Ra
Rb
10000000000
Addr := Ra + Rb
Rd := *Addr
Reservation := 1
SB Rd,Ra,Rb
110100
Rd
Ra
Rb
00000000000
Addr := Ra + Rb
*Addr[0:8] := Rd[24:31]
SH Rd,Ra,Rb
110101
Rd
Ra
Rb
00000000000
Addr := Ra + Rb
*Addr[0:16] := Rd[16:31]
SW Rd,Ra,Rb
110110
Rd
Ra
Rb
00000000000
Addr := Ra + Rb
*Addr := Rd
SWX Rd,Ra,Rb
110110
Rd
Ra
Rb
10000000000
Addr := Ra + Rb
Rd := *Rd if Reservation = 1
Reservation := 0
LBUI Rd,Ra,Imm
111000
Rd
Ra
Imm
Addr := Ra + s(Imm)
Rd[0:23] := 0
Rd[24:31] := *Addr[0:7]
LHUI Rd,Ra,Imm
111001
Rd
Ra
Imm
Addr := Ra + s(Imm)
Rd[0:15] := 0
Rd[16:31] := *Addr[0:15]
24
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 1-6 : MicroBlaze の命令セ ッ ト の一覧 (続き )
タ イプ A
0~5
6 ~ 10 11 ~ 15 16 ~ 20
タ イプ B
0~5
6 ~ 10 11 ~ 15
21 ~ 31
セマ ン テ ィ ク ス
16 ~ 31
LWI Rd,Ra,Imm
111010
Rd
Ra
Imm
Addr := Ra + s(Imm)
Rd := *Addr
SBI Rd,Ra,Imm
111100
Rd
Ra
Imm
Addr := Ra + s(Imm)
*Addr[0:7] := Rd[24:31]
SHI Rd,Ra,Imm
111101
Rd
Ra
Imm
Addr := Ra + s(Imm)
*Addr[0:15] := Rd[16:31]
SWI Rd,Ra,Imm
111110
Rd
Ra
Imm
Addr := Ra + s(Imm)
*Addr := Rd
1. 浮動小数点の演算には特殊な ケー ス が多数あ る ため、 通常の演算のみを示 し ま す。 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 にす
べての演算が リ ス ト さ れてい ます。
セマ フ ォの同期化
テ ス ト と セ ッ ト 、 比較 と ス ワ ッ プ、 メ モ リ 交換、 フ ェ ッ チ と 追加な ど の共通セマ フ ォ操作を イ ンプ
リ メ ン ト す る には、 LWX お よ び SWX. 命令が使用 さ れます。 ま た、 ス ピ ン ロ ッ ク の イ ンプ リ メ ン
ト に も 使用 さ れます
こ れ ら の命令は、 通常、 シ ス テ ム プ ロ グ ラ ムに よ っ て使用 さ れ、 随時アプ リ ケーシ ョ ン プ ロ グ ラ ム
に よ っ て呼び出 さ れます。一般的には、 メ モ リ か ら セマ フ ォ を読み込むにはプ ロ グ ラ ムに よ り LWX
が使用 さ れ、 予約が設定 さ れます ( まずはプ ロ セ ッ サが予約を保持)。 セマ フ ォ の値に基づいて結果
が計算 さ れ、 SWX 命令を使用 し て結果値は同 じ メ モ リ ロ ケーシ ョ ンに条件付で保存 さ れます。 条
件付保存は、 直前の LWX 命令に よ っ て確立 さ れた予約を基に実行 さ れます。 保存が実行 さ れ る と
き に予約が存在す る 場合、保存が実行 さ れ MSR [C] が 0 に ク リ ア さ れます。予約が存在 し ない場合、
タ ーゲ ッ ト メ モ リ ロ ケーシ ョ ンは変更 さ れず、 MSR [C] が 1 に設定 さ れます。
保存が問題な く 完了す る と 、 セマ フ ォ読み込みか ら セマ フ ォ保存ま での命令シーケ ン ス が実行 さ れ
ます。 ほかのデバ イ ス は読み出 し と ア ッ プデー ト の間のセマ フ ォ ロ ケーシ ョ ン を変更 し ません。 ほ
かのデバ イ ス は、 操作中にセマ フ ォ ロ ケーシ ョ ンか ら 読み出す こ と がで き ます。 セマ フ ォ操作が正
し く 動作す る には、 必ず LWX 命令を SWX 命令 と ペアで使用 し 、 同 じ ア ド レ ス を指定す る よ う に
し ます。 MicroBlaze では予約設定は ワ ー ド 単位で行われます。 両方の命令に対 し 、 ア ド レ ス の ワ ー
ド が一致 し てい る 必要があ り ます。こ れ ら の命令に対 し ては ワー ド 不一致の例外が生成 さ れません。
条件付保存は、 保存ア ド レ ス が予約を設定す る読み込みア ド レ ス と 一致 し ていない場合で も 、 予約
が存在す る 場合常に実行 さ れます。
予約は 1 度に 1 つ し か管理で き ません。 予約に関連 し たア ド レ スは後続の LWX 命令を実行す る と
変更で き ます。条件付保存は先の LWX 命令に よ り 確立 さ れた予約に基づ き実行 さ れます。SWX 命
令を実行す る と 、 LWX で確立 さ れた も の と ア ド レ ス が一致す る か ど う かにかかわ ら ず、 常にプ ロ
セ ッ サで保持 さ れてい る予約が ク リ アにな り ます。
リ セ ッ ト 、 割 り 込み、 例外、 お よ びブ レー ク (BRK お よ び BRKI 命令を含む) はすべて予約を ク リ
ア し ます。
LWX お よ び SWX 命令を使用す る ための一般的なガ イ ド ラ イ ンは次の よ う にな っ てい ます。
•
•
LWX お よ び SWX 命令はペアで使用 し 、 同 じ ア ド レ ス を使用 し ます。
ペアにな っ てお ら ず、 別のア ド レ ス に指定 さ れてい る SWX 命令は、 プ ロ セ ッ サで保持 さ れて
い る 予約を ク リ アす る ために使用す る こ と がで き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
25
第 1 章 : MicroBlaze アーキテ ク チ ャ
•
•
LWX 命令で条件付シーケ ン スは開始 し ます。 その後、 メ モ リ ア ク セ ス ま たは読み込まれた値
に基づいた計算が続 き ます。 シーケ ン スは SWX 命令で終了 し ます。 ほ と ん ど の場合、 SWX
命令のエ ラ ーは LWX に返 さ れ、 再試行 さ れます。
LWX 命令で読み込まれた値が 0 でない場合、 同期化プ リ ミ テ ィ ブ よ っ ては実行す る と き に
LWX をペアに し な く て も か ま い ません。 こ れは、 テ ス ト と セ ッ ト の イ ンプ リ メ ン テーシ ョ ン
例です。
loop: lwx
bnei
addik
swx
addic
bnei
next:
•
r5,r3,r0
r5,next
r5,r5,1
r5,r3,r0
r5,r0,0
r5,loop
;
;
;
;
;
;
load and reserve
branch if not equal to zero
increment value
try to store non-zero value
check reservation
loop if reservation lost
LWX 命令で求め る値が返 さ れない場合、 LWX 命令のループ を最小限にす る こ と で、 パ
フ ォーマ ン ス を改善す る こ と がで き ます。 ま た、 初期値チ ェ ッ ク を実行す る ため普通の読み込
み命令を使用 し て、 パフ ォーマン ス を改善す る こ と も で き ます。 こ れは、 ス ピ ン ロ ッ ク の イ ン
プ リ メ ン テーシ ョ ン例です。
loop: lw
r5,r3,r0 ; load the word
bnei
r5,loop
; loop back if word not equal to 0
lwx
r5,r3,r0 ; try reserving again
bnei
r5,loop
; likely that no branch is needed
addik r5,r5,1
; increment value
swx
r5,r3,r0 ; try to store non-zero value
addic r5,r0,0
; check reservation
bnei
r5,loop
; loop if reservation lost
•
LWX/SWX 命令ペアのループを最小限にす る こ と で、 前に進め る可能性が高ま り ます。 古い
値は保存実行前にテ ス ト す る必要があ り ます。 順序が逆にな っ てい る場合 ( 読み込みの前に保
存が行われ る 場合 )、 さ ら に多 く の SWX 命令が実行 さ れ、 LWX と SWX 間の予約が失われ
る 可能性が高ま り ます。
26
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
レジス タ
MicroBlaze は直交命令セ ッ ト アーキテ ク チ ャ で、 32 個の 32 ビ ッ ト 汎用レ ジ ス タ と 最大 18 個の
32 ビ ッ ト 特殊用途レ ジ ス タ が含ま れます。 特殊用途レ ジ ス タ の数は、 設定す る オプシ ョ ンに よ っ て
異な り ます。
汎用レ ジ ス タ
32 個の 32 ビ ッ ト 汎用レ ジ ス タ には、 R0 ~ R31 と い う 番号が付け ら れてい ます。 レ ジ ス タ フ ァ イ
ルは、ビ ッ ト ス ト リ ームのダ ウ ン ロ ー ド 時に リ セ ッ ト さ れます。 リ セ ッ ト 値は 0x00000000 です。 図
1-2 に汎用レ ジ ス タ を、 表 1-7 に各レ ジ ス タ の説明お よ び リ セ ッ ト 値 (存在す る場合) を示 し ます。
メ モ : レ ジ ス タ フ ァ イ ルは、 外部 リ セ ッ ト 入力 Reset お よ び Debug_Rst では リ セ ッ ト さ れません。
0
31
↑
R0 ~ R31
図 1-2 : R0 ~ R31
表 1-7 : 汎用レ ジ ス タ (R0 ~ R31)
ビッ ト
0:31
名前
R0
説明
リセッ ト値
常に 0 です。 書 き込まれたデー タ は、すべて破棄
さ れます。
0x00000000
0:31
R1 ~ R13
32 ビ ッ ト 汎用レ ジ ス タ 。
-
0:31
R14
割 り 込みの戻 り ア ド レ ス の格納に使用 さ れ る
32 ビ ッ ト レ ジ ス タ 。
-
0:31
R15
32 ビ ッ ト 汎用レ ジ ス タ 。 ユーザー ベ ク タ の戻
-
り ア ド レ ス格納への使用を推奨 し ます。
0:31
R16
ブ レー ク の戻 り ア ド レ ス の格納に使用 さ れ る
-
32 ビ ッ ト レ ジ ス タ 。
0:31
R17
MicroBlaze でハー ド ウ ェ ア例外を サポー ト す
-
る場合、 ハー ド ウ ェ ア例外の原因 と な る命令
に続 く 命令のア ド レ ス の読み込みに使用。 た
だ し 遅延ス ロ ッ ト の例外では、 BTR が使用 さ
れます ( 「分岐 タ ーゲ ッ ト レ ジ ス タ (BTR)」
を参照)。 それ以外の場合は汎用レ ジ ス タ で
す。
0:31
R18 ~ R31
32 ビ ッ ト 汎用レ ジ ス タ 。
-
汎用レ ジ ス タ の ソ フ ト ウ ェ アでの使用規則については、 表 3-2 を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
27
第 1 章 : MicroBlaze アーキテ ク チ ャ
特殊用途レ ジ ス タ
プ ロ グ ラ ム カ ウ ン タ (PC)
プ ロ グ ラ ム カ ウ ン タ (PC) は例外命令の 32 ビ ッ ト ア ド レ ス で、 MFS 命令を使用 し て読み出す こ と
は可能ですが、 MTS 命令を使用 し て書 き込む こ と はで き ません。 MFS 命令を使用する 場合、 PC レ
ジ ス タ は Sa = 0x0000 で指定 し ます。 図 1-3 に PC を、表 1-8 に説明お よび リ セ ッ ト 値を示 し ます。
0
31
↑
PC
図 1-3 : PC
表 1-8 : プ ログ ラム カ ウン タ (PC)
ビッ ト
0:31
名前
PC
説明
リセッ ト値
0x00000000
プログラ ム カウン タ
実行命令のア ド レ ス。 「mfs r2 0」 では、 mfs 命令のア ド
レ ス が R2 に格納 さ れます。
マ シ ン ス テー タ ス レ ジ ス タ (MSR)
マシ ン ス テー タ ス レ ジ ス タ には、 プ ロ セ ッ サの コ ン ト ロ ール ビ ッ ト お よ びス テー タ ス ビ ッ ト が含
まれます。 MFS 命令を使用 し て読み出す こ と がで き ます。 MSR を読み出す際、 ビ ッ ト 29 がキ ャ
リ ー コ ピー と し て ビ ッ ト 0 に複製 さ れます。 MSR は、 MTS 命令ま たは専用命令であ る MSRSET
お よ び MSRCLR を使用 し て書 き 込む こ と がで き ます。
MSRSET ま たは MSRCLR を使用 し て MSR に書 き 込む と 、キ ャ リ ー ビ ッ ト はすぐ に変化 し 、その
他のビ ッ ト は 1 ク ロ ッ ク サ イ ク ル後に変化 し ます。 MTS を使用 し て書 き込む と 、 すべての ビ ッ ト
が 1 ク ロ ッ ク サ イ ク ル後に有効にな り ます。 ビ ッ ト 0 に書 き 込まれた値は、 すべて破棄 さ れます
MSR を MTS ま たは MFS 命令 と 使用す る場合は、 MSR を Sx = 0x0001 で指定 し ます。 図 1-4 に
MSR レ ジ ス タ を、 表 1-9 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。
0
↑
CC
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
↑
予約済み
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
VMS VM UMS UM PVR EIP EE DCE DZO ICE FSL BIP C
IE BE
図 1-4 : MSR
28
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-9 : マシ ン ス テー タ ス レ ジ ス タ (MSR)
ビッ ト
0
名前
CC
説明
演算キ ャ リ ーの コ ピー
リセッ ト値
0
演算キ ャ リ ー ( ビ ッ ト 29) の コ ピーです。 CC は
常にビ ッ ト C と 同 じ です。
1:16
予約済み
17
VMS
仮想保護モー ド での保存
0
MMU を使用す る場合のみ (C_USE_MMU > 1
かつ C_AREA_OPTIMIZED = 0)
読み出 し /書き 込み
18
VM
仮想保護モー ド
0
0 : C_USE_MMU = 3 の場合は MMU ア ド レ ス
変換お よ びア ク セ ス保護デ ィ ス エーブル、
C_USE_MMU = 2 の場合はア ク セ ス保護デ ィ
ス エーブル。
1 : C_USE_MMU = 3 の場合は MMU ア ド レ ス
変換お よ びア ク セ ス保護 イ ネーブル、
C_USE_MMU = 2 の場合はア ク セ ス保護 イ
ネーブル。
MMU を使用す る場合のみ (C_USE_MMU > 1
かつ C_AREA_OPTIMIZED = 0)
読み出 し /書き 込み
19
UMS
ユーザー モー ド での保存
0
MMU を使用す る場合のみ (C_USE_MMU > 0
かつ C_AREA_OPTIMIZED = 0)
読み出 し /書き 込み
20
UM
ユーザー モー ド
0
0 : 特権モー ド 。 すべての命令が許可 さ れます。
1 : ユーザー モード 。 一部の命令は許可さ れま
せん。
MMU を使用す る場合のみ (C_USE_MMU > 0
かつ C_AREA_OPTIMIZED = 0)
読み出 し /書き 込み
21
PVR
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ の有無
C_PVR のパ ラ
0 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ な し
1 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ あ り
メ ー タ に依存
読み出 し のみ
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
29
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き )
ビッ ト
22
名前
EIP
説明
リセッ ト値
0
例外実行中
0 : 実行中のハー ド ウ ェ ア例外な し
1 : ハー ド ウ ェ ア例外を実行中
例外がサポー ト さ れてい る場合のみ
(C_*_EXCEPTION ま たは C_USE_MMU)
読み出 し /書き 込み
23
EE
0
例外 イ ネーブル
0 : ハー ド ウ ェ ア例外がデ ィ ス エーブル1
1 : ハー ド ウ ェ ア例外が イ ネーブル
例外がサ ポー ト さ れ て い る 場合のみ
(C_*_EXCEPTION ま たは C_USE_MMU)
読み出 し /書き 込み
24
DCE
0
デー タ キ ャ ッ シ ュ イ ネーブル
0 : デー タ キ ャ ッ シ ュ がデ ィ ス エーブル
1 : デー タ キ ャ ッ シ ュ が イ ネーブル
デー タ
キ ャ ッ シ ュ が使用 さ れてい る場合のみ
(C_USE_DCACHE = 1)
読み出 し /書き 込み
25
DZO
0 での除算ま たは除算オーバーフ ロ ー2
0
0 : 0 での除算な し 、 ま たは除算オーバーフ ロ ー
の発生
1 : 0 での除算あ り 、 ま たは除算オーバーフ ロ ー
の発生
ハー ド ウ ェ ア除算器が使用 さ れてい る 場合のみ
(C_USE_DIV = 1)
読み出 し /書き 込み
26
ICE
0
命令キ ャ ッ シ ュ イ ネーブル
0 : 命令キ ャ ッ シ ュ がデ ィ ス エーブル
1 : 命令キ ャ ッ シ ュ が イ ネーブル
命令 キ ャ ッ シ ュ が使用 さ れ て い る 場合のみ
(C_USE_ICACHE = 1)
読み出 し /書き 込み
30
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-9 : マシ ン ス テー タ ス レ ジ ス タ (MSR) (続き )
ビッ ト
27
名前
FSL
説明
FSL エ ラ ー
リセッ ト値
0
0 : FSL の get/getd/put/putd でエ ラ ーな し
1 : FSL の get/getd/put/putd で制御タ イ プが不
一致
FSL リ ン ク が使用 さ れてい る場合のみ
(C_FSL_LINKS > 0)
読み出 し /書き 込み
28
BIP
ブ レー ク 実行中
0
0 : 実行中のブ レー ク な し
1 : ブ レー ク 実行中
ブ レー ク の ソ ース は、 ソ フ ト ウ ェ アのブ レー ク
命令ま たは Ext_Brk ま たは Ext_NM_Brk ピ ン
か ら のハー ド ウ ェ ア ブ レー ク のいずれかです。
読み出 し /書き 込み
29
C
演算キ ャ リ ー
0
0 : キ ャ リ ーな し ( ボ ロ ー )
1 : キ ャ リ ー ( ボ ロ ーな し )
読み出 し /書き 込み
30
IE
割 り 込み イ ネーブル
0
0 : 割 り 込みがデ ィ ス エーブル
1 : 割 り 込みが イ ネーブル
読み出 し /書き 込み
31
BE
バス ロ ッ ク イ ネーブル3
0
0 : データ 側 OPB でのバス ロ ッ ク ディ ス エー
ブル
1 : デー タ 側 OPB でのバ ス ロ ッ ク イ ネーブル
バス ロ ッ ク イ ネーブルは、 IXCL、 DXCL、
ILMB、 DLMB、 IPLB、 DPLB、 ま たは IOPB
の動作に影響 し ません。
デー タ 側 OPB が使用 さ れてい る 場合のみ
読み出 し /書き 込み
1. MMU 例外 (デー タ 格納例外、 命令格納例外、 デー タ TLB ミ ス 例外、 命令 TLB ミ ス例外) はデ ィ ス
エーブルにで き ないため、 こ の ビ ッ ト の影響を受け ま せん。
2. こ の ビ ッ ト は、 整数が 0 で除算 さ れてい る こ と 、 ま たは除算オーバーフ ロ ーを示す信号でのみ使用
し ます。 FSR には、 浮動小数点 と 等価の も のがあ り ます。 DZO ビ ッ ト は、 プ ロ セ ッ サで例外処理
が イ ネーブルか ど う かにかかわ ら ず、 0 に よ る 除算ま たは除算オーバーフ ロ ーがあ る か ど う か を示
し ます。
3. バス プ ロ ト コ ルの詳細は、 IBM CoreConnect の仕様 『64-Bit On-Chip Peripheral Bus, Architectural
Specifications, Version 2.0』 を参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
31
第 1 章 : MicroBlaze アーキテ ク チ ャ
例外ア ド レ ス レ ジ ス タ (EAR)
例外ア ド レ ス レ ジ ス タ は、 次の例外を発生 さ せた読み込み/格納の完全な ア ド レ ス を格納 し ます。
•
不整列ア ク セ ス に よ る例外 (不整列ア ク セ ス のア ド レ ス )
•
DPLB ま たは DOPB 例外 (実行で き なか っ た PLB ま たは OPB デー タ ア ク セ ス のア ド レ ス )
•
デー タ 格納例外 ( ア ク セ ス さ れた (仮想) 有効ア ド レ ス )
•
命令格納例外 (読み出 さ れた (仮想) 有効ア ド レ ス )
•
デー タ TLB ミ ス 例外 ( ア ク セ ス さ れた (仮想) 有効ア ド レ ス )
•
命令 TLB ミ ス 例外 (読み出 さ れた (仮想) 有効ア ド レ ス )
その他の例外では、 こ のレ ジ ス タ の内容は定義さ れて いま せん。 EAR を MFS 命令で読み出す場
合、 Sa = 0x0003 で指定し ま す。 図 1-5 に EAR を 、 表 1-10 にビ ッ ト の説明およ びリ セッ ト 値を 示
し ま す。
0
31
↑
EAR
図 1-5 : EAR
表 1-10 : 例外ア ド レ ス レ ジ ス タ (EAR)
ビッ ト
0:31
32
名前
EAR
説明
例外ア ド レ ス レ ジ ス タ
japan.xilinx.com
リセッ ト値
0x00000000
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
例外ス テー タ ス レ ジ ス タ (ESR)
例外ス テー タ ス レ ジ ス タ には、プ ロ セ ッ サの ス テー タ ス ビ ッ ト が含まれます。 ESR を MFS 命令で
読み出す場合、Sa = 0x0005 で指定 し ます。 図 1-6 に ESR レ ジ ス タ を示 し ます。表 1-11 に ビ ッ ト の
説明 と リ セ ッ ト 値を、 表 1-12 に例外ス テー タ ス (ESS) を示 し ます。
19 20
↑
↑
DS
予約済み
26 27
↑
ESS
31
↑
EC
図 1-6 : ESR
表 1-11 : 例外ス テー タ ス レ ジ ス タ (ESR)
ビッ ト
名前
0:18
予約済み
19
DS
説明
遅延ス ロ ッ ト に よ る例外
リセッ ト値
0
0 : 遅延ス ロ ッ ト 命令に よ る例外な し
1 : 遅延ス ロ ッ ト 命令に よ る例外あ り
読み出 し のみ
20:26
ESS
例外ス テー タ ス
表 1-12 を参照
詳細は、 表 1-12 を参照 し て く だ さ い。
読み出 し のみ
27:31
EC
例外の原因
0
00000 : 高速シ ンプ レ ッ ク ス リ ン ク の例外
00001 : 不整列デー タ ア ク セ ス に よ る 例外
00010 : 不正な op コ ー ド に よ る 例外
00011 : 命令バ ス エ ラ ーに よ る 例外
00011 : デー タ バ ス エ ラ ーに よ る例外
00101 : 除算に よ る例外
00110 : 浮動小数点ユニ ッ ト に よ る例外
00111 : 特権命令に よ る例外
10000 : デー タ 格納に よ る例外
10001 : 命令格納に よ る例外
10010 : デー タ TLB ミ ス に よ る例外
10011 : 命令 TLB ミ ス に よ る 例外
読み出 し のみ
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
33
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-12 : 例外ス テー タ ス (ESS)
例外の原因
不整列デー タ
ア クセス
ビッ ト
20
名前
W
説明
ワ ー ド ア ク セ ス に よ る例外
リセッ ト値
0
0 : 不整列ハーフ ワー ド ア ク セ ス
1 : 不整列 ワー ド ア ク セ ス
21
S
格納ア ク セ ス に よ る例外
0
0 : 不整列読み込みア ク セ ス
1 : 不整列格納ア ク セ ス
22:26
Rx
ソ ース /デス テ ィ ネーシ ョ ン レ ジ ス タ
0
不整列ア ク セ ス で ソ ース (格納) ま た
はデス テ ィ ネーシ ョ ン (読み込み) と
し て使用 さ れ る汎用レ ジ ス タ
不正な命令
20:26
予約済み
0
命令バ ス エ ラ ー
20:26
予約済み
0
デー タ バ ス エ ラ ー
20:26
予約済み
0
除算
20
DEC
除算 : 除算例外原因
0
0 :ゼ ロ での 除算
1 : 除算オーバーフ ロ ー
21:26
予約済み
0
浮動小数点ユニ ッ ト
20:26
予約済み
0
特権命令
20:26
予約済み
0
高速シ ンプ レ ッ ク ス
リ ンク
20:22
予約済み
0
23:26
FSL
例外発生の原因 と な っ た高速シ ンプ
レ ッ ク ス リ ン ク の イ ンデ ッ ク ス
0
デー タ格納
20
DIZ
デー タ 格納 - ゾーン保護
0
0 : 実行 さ れていない
1 : 実行 さ れた
21
S
デー タ 格納 - 格納命令
0
0 : 実行 さ れていない
1 : 実行 さ れた
命令格納
22:26
予約済み
20
DIZ
0
命令格納 - ゾーン保護
0
0 : 実行 さ れていない
1 : 実行 さ れた
21:26
34
予約済み
japan.xilinx.com
0
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-12 : 例外ス テー タ ス (ESS) (続き )
例外の原因
ビッ ト
デー タ TLB ミ ス
名前
20
予約済み
21
S
説明
リセッ ト値
0
デー タ TLB ミ ス - 格納命令
0
0 : 実行 さ れていない
1 : 実行 さ れた
命令 TLB ミ ス
22:26
予約済み
0
20:26
予約済み
0
分岐 タ ーゲ ッ ト レ ジ ス タ (BTR)
分岐 タ ーゲ ッ ト レ ジ ス タ は、 MicroBlaze プ ロ セ ッ サで例外を使用す る よ う に設定 し た場合にのみ
存在 し ます。 MSR[EIP] = 0 の と き 、 実行 さ れ る 遅延ス ロ ッ ト の分岐命令すべてに対す る 分岐 タ ー
ゲ ッ ト ア ド レ ス が レ ジ ス タ に格納 さ れます。 遅延ス ロ ッ ト に含まれ る 命令に よ り 例外が発生す る と
(ESR[DS]=1)、例外ハン ド ラ は R17 に格納 さ れてい る 通常の例外ハン ド ラ の戻 り ア ド レ ス の代わ り
に、 BTR に格納 さ れてい る ア ド レ ス に命令を戻 し ます。 BTR を MFS 命令で読み出す場合、 Sa =
0x000B で指定 し ます。 図 1-7 に BTR レ ジ ス タ を、 表 1-13 にビ ッ ト の説明お よ び リ セ ッ ト 値を示
し ます。
0
31
↑
BTR
図 1-7 : BTR
表 1-13 : 分岐 タ ーゲ ッ ト レ ジ ス タ (BTR)
ビッ ト
0:31
名前
BTR
説明
遅延ス ロ ッ ト に含まれ る命令に よ り 発生す る例外
か ら 戻 る と き にハン ド ラ で使用 さ れ る 分岐 タ ー
ゲッ ト アド レス
リセッ ト値
0x00000000
読み出 し のみ
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
35
第 1 章 : MicroBlaze アーキテ ク チ ャ
浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (FSR)
浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ には、 浮動小数点ユニ ッ ト の ス テー タ ス ビ ッ ト が含まれ
ます。MFS 命令で読み出 し 、MTS 命令で書 き込む こ と がで き ます。 読み出 し ま たは書 き 込みを実行
す る 場合、 Sa = 0x0007 で指定 し ます。 浮動小数点ポ イ ン ト 命令はレ ジ ス タ の ビ ッ ト のみを セ ッ ト
し 、レ ジ ス タ を ク リ アにす る には MTS 命令を使用する し かあ り ません。図 1-8 に FSR レ ジ ス タ を、
表 1-14 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。
27 28 29 30 31
↑
↑ ↑ ↑ ↑ ↑
予約済み
IO DZ OF UF DO
図 1-8 : FSR
表 1-14 : 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (FSR)
ビッ ト
名前
説明
リセッ ト値
0:26
予約済み
27
IO
不正な操作
0
28
DZ
0 での除算
0
29
OF
オーバーフ ロ ー
0
30
UF
ア ン ダーフ ロ ー
0
31
DO
非正規化オペ ラ ン ド エ ラ ー
0
未定義
例外デー タ レ ジ ス タ (EDR)
例外デー タ レ ジ ス タ には、 FSL 例外の原因 と な っ た FSL リ ン ク で読み出 さ れたデー タ が格納 さ れ
ます。
その他の例外では、こ の レ ジ ス タ の内容は定義 さ れていません。 EDR を MFS 命令で読み出す場合、
Sa = 0x000D で指定 し ます。 図 1-9 に EDR レ ジ ス タ を、 表 1-15 にビ ッ ト の説明お よ び リ セ ッ ト 値
を示 し ます。
メ モ : C_FSL_LINKS が 0 よ り 大 き く 、C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合にのみ イ
ンプ リ メ ン ト さ れます。
0
31
↑
EDR
図 1-9 : EDR
36
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-15 : 例外デー タ レ ジ ス タ (EDR)
ビッ ト
0:31
名前
EDR
説明
リセッ ト値
0x00000000
例外デー タ レ ジ ス タ
プ ロ セ ス識別レ ジ ス タ (PID)
MMU ア ド レ ス変換の実行中に、 ソ フ ト ウ ェ ア プ ロ セ ス を識別す る ために使用 し ます。 MicroBlaze
では、 C_USE_MMU コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンで制御 し ます。 C_USE_MMU が 1 よ り
大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る場合にのみ イ ンプ リ メ ン ト さ れます。 MFS
お よ び MTS 命令で PID にア ク セ スす る場合、Sa = 0x1000 で指定 し ます。 こ の レ ジ ス タ へのア ク セ
ス は、 メ モ リ 管理用の特殊な レ ジ ス タ のパ ラ メ ー タ 、 C_MMU_TLB_ACCESS の設定に従い ます。
ま た、 TLB エン ト リ へのア ク セ ス に も 使用 さ れます。
•
TLBHI (Translation Look-Aside Buffer High) を書 き込む際に、 PID の値は TLB エン ト リ の
TID フ ィ ール ド に格納 さ れます。
•
TLBHI を読み出 し 、 ま た MSR[UM] が設定 さ れていない場合は、 TID フ ィ ール ド の値が PID
に格納 さ れます。
図 1-10 に PID レ ジ ス タ を、 表 1-16 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。
24
31
↑
↑
予約済み
PID
図 1-10 : PID
表 1-16 : プ ロ セス識別レ ジ ス タ (PID)
ビッ ト
名前
0:23
予約済み
24:31
PID
説明
MMU ア ド レ ス変換の実行中に、 ソ フ ト ウ ェ ア プ
リセッ ト値
0x00
ロ セ ス を識別
読み出 し /書 き 込み
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
37
第 1 章 : MicroBlaze アーキテ ク チ ャ
ゾーン保護レ ジ ス タ (ZPR)
TLB エン ト リ で定義さ れた MMU メ モリ 保護を 無効にし ます。 MicroBlaze では、C_USE_MMU コ
ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンで制御 し ます。 C_USE_MMU が 1 よ り 大き く 、 C_AREA_
OPTIMIZED が 0、 お よ び指定 さ れた メ モ リ 保護ゾーン数が 0 よ り 大 き い (C_MMU_ZONES> 0)
場合にのみ イ ンプ リ メ ン ト さ れます。 イ ンプ リ メ ン ト さ れ る レ ジ ス タ ビ ッ ト 数は、 指定 さ れた メ モ
リ 保護ゾーン数 (C_MMU_ZONES) に よ っ て決ま り ます。 MFS お よ び MTS 命令で ZPR にア ク セ
スす る 場合、Sa = 0x1001 で指定 し ます。 こ の レ ジ ス タ へのア ク セ スは、 メ モ リ 管理用の特殊な レ ジ
ス タ のパ ラ メ ー タ 、 C_MMU_TLB_ACCESS の設定に従い ます。 図 1-11 に ZPR レ ジ ス タ を、 表
1-17 に ビ ッ ト の説明お よび リ セ ッ ト 値を示 し ます。
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
ZP0
ZP1
ZP2
ZP3
ZP4
ZP5
ZP6
ZP7
ZP8
ZP9
ZP10
ZP11
ZP12
ZP13
ZP14
ZP15
図 1-11 : ZPR
表 1-17 : ゾーン保護レ ジ ス タ (ZPR)
ビッ ト
名前
説明
リセッ ト値
0:1
ZP0
ゾーン保護
0x00000000
2:3
ZP1
ユーザー モー ド (MSR[UM] = 1)
...
...
00 : TLB エン ト リ の V を無効にする 。 ページへのア ク セ
30:31
ZP15
スは許可 さ れません。
01 : 無効にな る エン ト リ な し 。 TLB エン ト リ の V、 WR、
お よ び EX が使用 さ れます。
10 : 無効にな る エン ト リ な し 。 TLB エン ト リ の V、 WR、
お よ び EX が使用 さ れます。
11 : TLB エン ト リ の WR お よ び EX を無効にす る。 書 き
込みお よ び実行可能 と し てページにア ク セ ス し ます。
特権モー ド (MSR[UM] = 0)
00 : 無効にな る エン ト リ な し 。 TLB エン ト リ の V、 WR、
お よ び EX が使用 さ れます。
01 : 無効にな る エン ト リ な し 。 TLB エン ト リ の V、 WR、
お よ び EX が使用 さ れます。
10 : TLB エン ト リ の WR お よ び EX を無効にす る。 書 き
込みお よ び実行可能 と し てページにア ク セ ス し ます。
11 : TLB エン ト リ の WR お よ び EX を無効にす る。 書 き
込みお よ び実行可能 と し てページにア ク セ ス し ます。
読み出 し /書 き 込み
38
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO)
MMU の UTLB (Unified Translation Look-Aside Buffer) エン ト リ へのア ク セス に使用し ま す。
MicroBlaze では、C_USE_MMU コ ン フ ィ ギュ レ ーショ ン オプショ ン で制御し ま す。 C_USE_MMU
が 1 よ り 大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れま
す。 MFS お よび MTS 命令で TLBLO にア ク セ スす る場合、Sa = 0x1003 で指定 し ます。 TLBLO の
読み出 し ま たは書 き 込みでは、TLBX レ ジ ス タ で イ ンデ ッ ク ス を付け ら れた UTLB エン ト リ がア ク
セ ス さ れます。
こ の レ ジ ス タ の読み出 し は、 メ モ リ 管理用の特殊な レ ジ ス タ のパ ラ メ ー タ、
C_MMU_TLB_ACCESS の設定に従い ます。
UTLB は、 ビ ッ ト ス ト リ ームがダ ウ ン ロ ー ド さ れ る と リ セ ッ ト さ れます。 リ セ ッ ト 値はすべての
TLBLO エン ト リ で 0x00000000 です。
メ モ : UTLB は、 外部 リ セ ッ ト 入力 Reset お よ び Debug_Rst では リ セ ッ ト さ れません。
図 1-12 に TLBLO レ ジ ス タ を、 表 1-18 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。
0
22 23 24
28 29 30 31
↑
↑ ↑
↑
RPN
EX WR
ZSEL
↑ ↑ ↑ ↑
W
I
M G
図 1-12 : TLBLO
表 1-18 : 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO)
ビッ ト
0:21
名前
RPN
説明
実 (物理) ページ番号
リセッ ト値
0x000000
TLB ヒ ッ ト が発生す る と 、 こ の フ ィ ール ド が TLB エン
ト リ か ら 読み出 さ れ、 物理ア ド レ ス の作成に使用 さ れま
す。 SIZE フ ィ ール ド の値に よ っ ては RPN ビ ッ ト の一部
は物理ア ド レ ス には使用 さ れないため、 ソ フ ト ウ ェ アで
こ の フ ィ ール ド の未使用ビ ッ ト を 0 にする 必要があ り ま
す。
C_USE_MMU=3 の場合のみ
読み出 し /書 き 込み
22
EX
実行フ ァ イ ル
0
1 に設定す る と ページに実行 コ ー ド が含まれ、 命令は
ページ よ り フ ェ ッ チで き ます。 0 の場合は、 命令はページ
か ら フ ェ ッ チで き ません。 EX ビ ッ ト が 0 のページか ら 命
令を フ ェ ッ チす る と 、 命令格納例外が発生 し ます。
読み出 し /書 き 込み
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
39
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-18 : 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO) (続き )
ビッ ト
23
名前
WR
説明
リセッ ト値
0
書 き込み可能
1 に設定す る と ページは書 き込み可能で、 格納命令を使
用 し てページ内のア ド レ ス ににデー タ を格納で き ます。
0 の場合は、 ページは読み出 し のみで、 書 き込みで き ま
せん。 WR ビ ッ ト が 0 のページにデー タ を格納す る と 、
デー タ 格納例外が発生 し ます。
読み出 し /書 き 込み
24:27
ZSEL
0x0
ゾーン選択
ゾーン保護レ ジ ス タ (ZPR) の 16 個のゾーン フ ィ ール ド
(Z0 ~ Z15) か ら 1 個を選択 し ます。
ZSEL が 0x5 の場合は、 ゾーン フ ィ ール ド Z5 が選択 さ
れます。 選択 さ れた ZPR フ ィ ール ド は、TLB エン ト リ の
EX フ ィ ール ド お よ び WR フ ィ ール ド で指定 さ れた ア ク
セ ス保護の変更に使用 さ れます。 ま た、 TLB エン ト リ の
V (有効) フ ィ ール ド を無効に し 、 ページがア ク セ ス さ れ
ない よ う に し ます。
読み出 し /書 き 込み
28
W
1
ラ イ ト スルー
パ ラ メ ー タ C_DCACHE_USE_WRITEBACK が 1 に設定 さ れ
てい る場合、 こ の ビ ッ ト はキ ャ ッ シ ュ ポ リ シーを制御 し
ます。 ラ イ ト スルーは 1 に設定 さ れてい る 場合に選択 さ
れ、 それ以外の場合は ラ イ ト バ ッ ク が選択 さ れます。
C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れない限
り 、 こ の ビ ッ ト は 1 に固定 さ れていて、 ラ イ ト スルーが
常に使用 さ れます。
読み出 し /書 き 込み
29
I
0
キ ャ ッ シ ュ の抑止
1 に設定 さ れ る と 、 ページへのア ク セ ス はキ ャ ッ シ ュ さ
れません。
0 の場合は、 ページへのア ク セ スはキ ャ ッ シ ュ可能です。
読み出 し /書 き 込み
40
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-18 : 変換ル ッ ク アサイ ド バ ッ フ ァ Low レ ジ ス タ (TLBLO) (続き )
ビッ ト
30
名前
M
説明
リセッ ト値
0
メ モ リ コ ヒ ーレ ン ト
メ モ リ の コ ヒ ーレ ン スは MicroBlaze では イ ンプ リ メ ン
ト さ れないため、 こ の ビ ッ ト は 0 に固定 さ れてい ます。
読み出 し のみ
31
G
0
保護
ビ ッ ト が 1 に設定 さ れ る と 、 メ モ リ は保護 さ れ、 論理的
なページ ア ク セ スは許可 さ れません。
0 の場合は、 論理的なページ ア ク セ ス が許可 さ れます。
G 属性は、 メ モ リ マ ッ プ さ れた I/O デバ イ ス が不適切な
命令か ら ア ク セ ス さ れない よ う に保護 し ます。
読み出 し /書 き 込み
変換ル ッ ク アサイ ド バ ッ フ ァ High レ ジ ス タ (TLBHI)
MMU の UTLB (Unified Translation Look-Aside Buffer) エン ト リ へのアク セス に使用し ま す。
MicroBlaze では、C_USE_MMU コ ン フ ィ ギュ レ ーショ ン オプショ ン で制御し ま す。 C_USE_MMU
が 1 よ り 大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れま
す。 MFS お よ び MTS 命令で TLBHI にア ク セ スす る場合、 Sa = 0x1004 で指定 し ます。 TLBHI の
読み出 し ま たは書 き 込みでは、TLBX レ ジ ス タ で イ ンデ ッ ク ス を付け ら れた UTLB エン ト リ がア ク
セ ス さ れます。 こ の レ ジ ス タ の読み出 し は、メ モ リ 管理用の特殊な レ ジ ス タ のパ ラ メ ー タ 、C_MMU
_TLB_ACCESS の設定に従い ます。
ま た、 TLB エン ト リ へのア ク セ ス に も 使用 さ れます。
•
書 き 込みでは、 PID の値が TLB エン ト リ の TID フ ィ ール ド に格納 さ れます。
•
読み出 し て、 MSR[UM] が設定 さ れていない場合は、 TID フ ィ ール ド の値が PID に格納 さ れ
ます。
UTLB は、 ビ ッ ト ス ト リ ームがダ ウ ン ロ ー ド さ れ る と リ セ ッ ト さ れます。 リ セ ッ ト 値はすべての
TLBHI エン ト リ で 0x00000000 です。
メ モ : UTLB は、 外部 リ セ ッ ト 入力 Reset お よ び Debug_Rst では リ セ ッ ト さ れません。
図 1-13 に TLBHI レ ジ ス タ を、 表 1-19 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。
0
22
25 26 27 28
↑
↑
TAG
SIZE
↑ ↑ ↑
V
E U0
31
↑
予約済み
図 1-13 : TLBHI
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
41
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-19 : 変換ル ッ ク アサイ ド バ ッ フ ァ High レ ジ ス タ (TLBHI)
ビッ ト
0:21
名前
TAG
説明
リセッ ト値
0x000000
TLB エン ト リ タ グ
仮想 メ モ リ ア ド レ ス のページ番号部分 と 比較 さ れます。
比較は SIZE フ ィ ール ド で制御 さ れます。
読み出 し /書 き 込み
22:24
SIZE
000
サイズ
ページ サ イ ズ を指定 し ます。 TAG フ ィ ール ド と 仮想 メ
モ リ ア ド レ ス のページ番号部分の比較で使用 さ れ る ビ ッ
ト の範囲を制御 し ます。 こ の フ ィ ール ド で定義 さ れ る
ページ サ イ ズは表 1-34 を参照 し て く だ さ い。
読み出 し /書 き 込み
25
V
0
有効
1 に設定 さ れた場合、 TLB エン ト リ は有効で、 ページ
変換エン ト リ を含んでい ます。
0 の場合は、 TLB エン ト リ は無効です。
読み出 し /書 き 込み
26
E
0
エンデ ィ ア ン
MicroBlaze のページへのア ク セ スは常に ビ ッ グ エン
デ ィ ア ン形式であ る ため、 こ の ビ ッ ト は 0 に固定 さ れて
い ます。
読み出 し のみ
27
U0
0
ユーザー定義
MicroBlaze にはユーザー定義の格納属性がないため、
こ の ビ ッ ト は 0 に固定 さ れてい ます。
読み出 し のみ
28:31
42
予約済み
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
変換ル ッ ク アサイ ド バ ッ フ ァ イ ンデ ッ ク ス レ ジ ス タ (TLBX)
TLBLO お よ び TLBHI レ ジ ス タ にア ク セ スす る場合に、 UTLB (Unified Translation Look-Aside
Buffer) への イ ンデ ッ ク ス と し て使用 し ます。 MicroBlaze では、 C_USE_MMU コ ン フ ィ ギ ュ レー
シ ョ ン オプシ ョ ンで制御 し ます。 C_USE_MMU が 1 よ り 大き く 、 C_AREA_OPTIMIZED が 0 に
設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れます。 MFS お よ び MTS 命令で TLBX にア ク セ ス
す る 場合、 Sa = 0x1002 で指定 し ます。 図 1-14 に TLBX レ ジ ス タ を、 表 1-20 に ビ ッ ト の説明お よ
び リ セ ッ ト 値を示 し ます。
0
26
↑
MISS
31
↑
↑
予約済み
INDEX
図 1-14 : TLBX
表 1-20 : 変換ル ッ ク アサイ ド バ ッ フ ァ イ ンデ ッ ク ス レ ジ ス タ (TLBX)
ビッ ト
0
名前
MISS
説明
TLB ミ ス
リセッ ト値
0
TLBSX レ ジ ス タ が、 TLB エン ト リ に含まれた仮想ア ド
レ ス を使用 し て書き 込まれ る と 、 0 にな り ます。
仮想ア ド レ ス が TLB エン ト リ に含まれない場合は 1 に
な り ます。 TLBX レ ジ ス タ 自身が書 き 込まれた場合 も 0
にな り ます。
読み出 し のみ
メ モ リ 管理用の特殊レ ジ ス タ のパ ラ メ ー タ
C_MMU_TLB_ACCESS > 0 の場合に読み出す こ と が
で き ます。
1:25
予約済み
26:31
INDEX
TLB イ ンデ ッ ク ス
000000
TLBLO お よ び TLBHI レ ジ ス タ がア ク セ スす る TLB エ
ン ト リ の イ ンデ ッ ク ス に使用 さ れます。 TLBSX レ ジ ス
タ が、 対応する TLB エン ト リ に含まれた仮想ア ド レ ス
を使用 し て書き 込まれ る と 、 こ の フ ィ ール ド は TLB イ
ンデ ッ ク ス でア ッ プデー ト さ れます。
読み出 し /書き 込み
メ モ リ 管理用の特殊レ ジ ス タ のパ ラ メ ー タ が
C_MMU_TLB_ACCESS > 0 の場合に読み出 し お よ び
書き 込みがで き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
43
第 1 章 : MicroBlaze アーキテ ク チ ャ
変換ル ッ ク アサイ ド バ ッ フ ァ 検索イ ンデ ッ ク ス レ ジ ス タ (TLBSX)
UTLB (Unified Translation Look-Aside Buffer ) での仮想ページ番号の検索に使用し ま す。
MicroBlaze では、C_USE_MMU コ ン フ ィ ギュ レ ーショ ン オプショ ン で制御し ま す。 C_USE_MMU
が 1 よ り 大 き く 、 C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合にのみ イ ンプ リ メ ン ト さ れま
す。 TLBSX を MTS 命令で書 き込む場合、Sa = 0x1005 で指定 し ます。 図 1-15 に TLBSX レ ジ ス タ
を、 表 1-21 に ビ ッ ト の説明お よ び リ セ ッ ト 値を示 し ます。
0
22
31
↑
↑
VPN
予約済み
図 1-15 : TLBSX
表 1-21 : 変換ル ッ ク アサイ ド バ ッ フ ァ イ ンデ ッ ク ス検索レ ジ ス タ (TLBSX)
ビッ ト
0:21
名前
VPN
説明
リセッ ト値
仮想ページ番号
仮想 メ モ リ ア ド レ ス のページ番号部分を表 し 、 仮想 メ
モ リ ア ド レ ス のページ番号部分 と 比較 さ れます。 比較
は、 V ビ ッ ト が 1 に設定 さ れてい る 各 TLB エン ト リ の
SIZE フ ィ ール ド で制御 さ れます。
仮想ページ番号が検出 さ れた場合は、 TLBX レ ジ ス タ
は TLB エン ト リ の イ ンデ ッ ク ス を使用 し て書 き 込まれ、
TLBX の MISS ビ ッ ト は 0 にな り ます。 TLB エン ト リ で
仮想ページ番号が検出 さ れない場合は、 TLBX レ ジ ス
タ の MISS ビ ッ ト が 1 に設定 さ れます。
書き 込みのみ
22:31
44
予約済み
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (PVR)
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ は、C_PVR コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ンに よ り 制御 さ れま
す。
•
C_PVR を 0 に設定す る と PVR は イ ンプ リ メ ン ト さ れず、 MSR[PVR]=0 にな り ます。
•
1 に設定する と 最初の レ ジ ス タ PVR0 のみが イ ンプ リ メ ン ト さ れ、 2 に設定す る と PVR0 ~
PVR11 の 12 個の PVR レ ジ ス タ すべてが イ ンプ リ メ ン ト さ れます。
PVR を MFS 命令で読み出す場合、 Sa = 0x200x で指定 し ます。 x は 0x0 ~ 0xB の レ ジ ス タ 番号で
指定 し ます。
表 1-22 ~ 表 1-33 に、 ビ ッ ト の説明お よ び値を示 し ます。
表 1-22 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 (PVR0)
ビッ ト
名前
説明
値
0
CFG
PVR の イ ンプ リ メ ン テーシ ョ ン :
0 = 基本、 1 = フル
C_PVR の値に依存
1
BS
バ レル シ フ タ の使用
C_USE_BARREL
2
DIV
除算器の使用
C_USE_DIV
3
MUL
ハー ド ウ ェ ア乗算器の使用
C_USE_HW_MUL > 0
4
FPU
FPU の使用
C_USE_FPU > 0
5
EXC
例外の使用
6
ICU
命令キ ャ ッ シ ュ の使用
C_USE_ICACHE
7
DCU
デー タ キ ャ ッ シ ュ の使用
C_USE_DCACHE
8
MMU
MMU の使用
C_USE_MMU > 0
9:15
予約済み
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
C_*_EXCEPTION の値に依存
ま た、 C_USE_MMU > 0 の場合
0
japan.xilinx.com
45
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-22 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 (PVR0) (続き )
ビッ ト
16:23
名前
MBV
説明
値
MicroBlaze リ リ ース バージ ョ ン
各 リ リ ース固有
コー ド
0x1 = v5.00.a
0x2 = v5.00.b
0x3 = v5.00.c
0x4 = v6.00.a
0x6 = v6.00.b
0x5 = v7.00.a
0x7 = v7.00.b
0x8 = v7.10.a
0x9 = v7.10.b
0xA = v7.10.c
0xB = v7.10.d
0xC = v7.20.a
0xD = v7.20.b
0xE = v7.20.c
0xF = v7.20.d
24:31
USR1
C_PVR_USER1
ユーザー コ ン フ ィ ギ ュ レーシ ョ
ン値 1
表 1-23 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 1 (PVR1)
ビッ ト
0:31
名前
USR2
説明
値
C_PVR_USER2
ユーザー コ ン フ ィ ギ ュ レーシ ョ
ン値 2
表 1-24 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 2 (PVR2)
ビッ ト
46
名前
説明
値
0
DOPB
使用中のデー タ 側 OPB
C_D_OPB
1
DLMB
使用中のデー タ 側 LMB
C_D_LMB
2
IOPB
使用中の命令側 OPB
C_I_OPB
3
ILMB
使用中の命令側 LMB
C_I_LMB
4
IRQEDGE
エ ッ ジで ト リ ガ さ れ る 割 り 込み
C_INTERRUPT_IS_EDGE
5
IRQPOS
立ち上が り エ ッ ジへの割 り 込み
C_EDGE_IS_POSITIVE
6
DPLB
使用中のデー タ 側 PLB
C_D_PLB
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-24 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 2 (PVR2) (続き )
ビッ ト
名前
説明
値
7
IPLB
使用中の命令側 PLB
C_I_PLB
8
INTERCON
PLB イ ン タ ー コ ネ ク ト の使用
C_INTERCONNECT
9:11
予約済み
12
FSL
拡張 FSL 命令の使用
C_USE_EXTENDED_FSL_INSTR
13
FSLEXC
FSL 制御ビ ッ ト 不一致に よ る例
C_FSL_EXCEPTION
外の生成
14
MSR
MSRSET 命令お よ び MSRCLR
C_USE_MSR_INSTR
命令の使用
15
PCMP
パ タ ーン比較命令の使用
C_USE_PCMP_INSTR
16
AREA
低い命令スループ ッ ト でエ リ ア
を最適化する ための イ ンプ リ メ
ン テーシ ョ ンの選択
C_AREA_OPTIMIZED
17
BS
バ レル シ フ タ の使用
C_USE_BARREL
18
DIV
除算器の使用
C_USE_DIV
19
MUL
ハー ド ウ ェ ア乗算器の使用
C_USE_HW_MUL > 0
20
FPU
FPU の使用
C_USE_FPU > 0
21
MUL64
64 ビ ッ ト ハー ド ウ ェ ア乗算器
C_USE_HW_MUL = 2
の使用
22
FPU2
浮動小数点変換お よ び平方根命
令の使用
C_USE_FPU = 2
23
IPLBEXC
IPLB エ ラ ーに よ る 例外の生成
C_IPLB_BUS_EXCEPTION
24
DPLBEXC
DPLB エ ラ ーに よ る例外の生成
C_DPLB_BUS_EXCEPTION
25
OP0EXC
不正な op コ ー ド 0x0 に よ る 例
外の生成
C_OPCODE_0x0_ILLEGAL
26
UNEXC
不整列デー タ ア ク セ ス に よ る 例
外の生成
C_UNALIGNED_EXCEPTIONS
27
OPEXC
不正な op コー ド に よ る例外の
生成
C_ILL_OPCODE_EXCEPTION
28
IOPBEXC
IOPB エ ラ ーに よ る例外の生成
C_IOPB_BUS_EXCEPTION
29
DOPBEXC
DOPB エ ラ ーに よ る例外の生成
C_DOPB_BUS_EXCEPTION
30
DIVEXC
0 での除算ま たは除算オーバー
C_DIV_ZERO_EXCEPTION
フ ロ ーに よ る 例外の生成
31
FPUEXC
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
FPU に よ る 例外の生成
japan.xilinx.com
C_FPU_EXCEPTION
47
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-25 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 3 (PVR3)
ビッ ト
名前
0
DEBUG
1:2
予約済み
3:6
PCBRK
7:9
予約済み
10:12
RDADDR
13:15
予約済み
16:18
WRADDR
19
予約済み
20:24
FSL
25:31
予約済み
説明
値
デバ ッ グ ロ ジ ッ ク の使用
C_DEBUG_ENABLED
PC ブ レー ク ポ イ ン ト の数
C_NUMBER_OF_PC_BRK
読み出 し ア ド レ ス ブ レー ク ポ イ
ン ト の数
C_NUMBER_OF_RD_ADDR_BRK
書き 込みア ド レ ス ブ レー ク ポ イ
ン ト の数
C_NUMBER_OF_WR_ADDR_BRK
FSL の数
C_FSL_LINKS
表 1-26 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 4 (PVR4)
ビッ ト
名前
説明
値
0
ICU
命令キ ャ ッ シ ュ の使用
C_USE_ICACHE
1:5
ICTS
命令キ ャ ッ シ ュ の タ グ サ イ ズ
C_ADDR_TAG_BITS
6
予約済み
7
ICW
命令キ ャ ッ シ ュ の書 き込み許可
C_ALLOW_ICACHE_WR
8:10
ICLL
2 を底 と す る 命令キ ャ ッ シ ュ ラ
log2(C_ICACHE_LINE_LEN)
1
イ ンの長 さ の対数
11:15
ICBS
2 を底 と する 命令キ ャ ッ シ ュ のバ
log2(C_CACHE_BYTE_SIZE)
イ ト サ イ ズの対数
16
IAU
17
予約済み
18
ICI
19:31
予約済み
すべての メ モ リ ア ク セ スへの命
令キ ャ ッ シ ュ の使用
C_ICACHE_ALWAYS_USED
0
命令キ ャ ッ シ ュ XCL プ ロ ト コ ル
C_ICACHE_INTERFACE
0
表 1-27 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 5 (PVR5)
ビッ ト
48
名前
説明
値
0
DCU
デー タ キ ャ ッ シ ュ の使用
C_USE_DCACHE
1:5
DCTS
デー タ キ ャ ッ シ ュ の タ グ サ イ ズ
C_DCACHE_ADDR_TAG
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-27 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 5 (PVR5) (続き )
ビッ ト
名前
説明
値
6
予約済み
1
7
DCW
デー タ キ ャ ッ シ ュ の書 き込みを
許可
C_ALLOW_DCACHE_WR
8:10
DCLL
2 を底 と す る デー タ キ ャ ッ シ ュ
log2(C_DCACHE_LINE_LEN)
ラ イ ンの長 さ の対数
11:15
DCBS
2 を底 と す る デー タ キ ャ ッ シ ュ
log2(C_DCACHE_BYTE_SIZE)
のバ イ ト サ イ ズの対数
16
DAU
すべての メ モ リ ア ク セ スへの
デー タ キ ャ ッ シ ュ の使用
C_DCACHE_ALWAYS_USED
17
DWB
デー タ キ ャ ッ シ ュ ポ リ シーは
ラ イ ト バッ ク
C_DCACHE_USE_WRITEBACK
18
DCI
デー タ キ ャ ッ シ ュ XCL プ ロ ト
コル
C_DCACHE_INTERFACE
19:31
予約済み
0
表 1-28 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 6 (PVR6)
ビッ ト
0:31
名前
ICBA
説明
命令キ ャ ッ シ ュ のベース ア ド レ ス
値
C_ICACHE_BASEADDR
表 1-29 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 7 (PVR7)
ビッ ト
0:31
名前
ICHA
説明
命令キ ャ ッ シ ュ のハ イ ア ド レ ス
値
C_ICACHE_HIGHADDR
表 1-30 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 8 (PVR8)
ビッ ト
0:31
名前
DCBA
説明
デー タ キ ャ ッ シ ュ のベース
アド レス
値
C_DCACHE_BASEADDR
表 1-31 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 9 (PVR9)
ビッ ト
0:31
名前
DCHA
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
説明
デー タ キ ャ ッ シ ュ のハ イ
アド レス
japan.xilinx.com
値
C_DCACHE_HIGHADDR
49
第 1 章 : MicroBlaze アーキテ ク チ ャ
表 1-32 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 10 (PVR10)
ビッ ト
0:7
名前
ARCH
説明
タ ーゲ ッ ト アーキ テ ク チ ャ :
値
パ ラ メ ー タ C_FAMILY に よ り 定義
0x6 :
Spartan®-3、 XA Spartan-3
0x7 :
Virtex-4、
QPro Virtex-4 Hi Rel
QPro Virtex-4 Rad ト ラ レ ン ト
0x8 :
Virtex-5
0x9 :
Spartan-3E、 XA Spartan-3E
0xA :
Spartan-3A、 XA Spartan-3A
0xB :
Spartan-3AN
0xC :
Spartan-3A DSP
XA Spartan-3A DSP
0xD :
Spartan-6
Virtex-6
8:31
0
予約済み
表 1-33 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 11 (PVR11)
ビッ ト
0:1
名前
MMU
説明
MMU の使用
値
C_USE_MMU
0 : なし
1 : ユーザー モー ド
2 : 保護
3 : 仮想
50
2:4
ITLB
命令シ ャ ド ウ TLB のサ イ ズ
log2(C_MMU_ITLB_SIZE)
5:7
DTLB
デー タ シ ャ ド ウ TLB のサ イ ズ
log2(C_MMU_DTLB_SIZE)
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
レジス タ
表 1-33 : プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 11 (PVR11) (続き )
ビッ ト
8:9
名前
TLBACC
説明
TLB レ ジ ス タ のア ク セ ス :
値
C_MMU_TLB_ACCESS
0 : 最小
1 : 読み出 し
2 : 書き 込み
3 : フル ア ク セ ス
10:14
ZONES
メ モ リ 保護ゾーンの数
C_MMU_ZONES
15:16
予約済み
将来の使用に予約
0
17:31
RSTMSR
MSR の リ セ ッ ト 値
C_RESET_MSR
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
51
第 1 章 : MicroBlaze アーキテ ク チ ャ
パイ プ ラ イ ン アーキテ ク チ ャ
MicroBlaze では、 命令の実行にパ イ プ ラ イ ン処理を使用 し ます。 ほ と んど の命令では、 各段を完了
す る のに 1 ク ロ ッ ク サ イ ク ルかか る ため、 1 つの命令を完了す る のに必要な ク ロ ッ ク サ イ ク ル数
は、 パ イ プ ラ イ ン段数に等 し く 、 サ イ ク ルご と に命令が 1 つ完了 し ます。 実行段に複数の ク ロ ッ ク
サ イ ク ルを要す る 命令 も あ り ますが、 その場合は命令が完了す る ま で後続命令が ス ト ール し ます。
処理速度が低い メ モ リ か ら 実行す る場合、 フ ェ ッ チ段に複数サ イ ク ルかか る こ と があ り ます。 こ の
レ イ テ ン シは、パ イ プ ラ イ ンの効率に直接影響 し ます。MicroBlaze では命令プ リ フ ェ ッ チ バ ッ フ ァ
が イ ンプ リ メ ン ト さ れ、 こ の よ う な レ イ テ ン シの影響が軽減 さ れます。 命令実行段に複数サ イ ク ル
かか る 命令でパ イ プ ラ イ ンが ス ト ール さ れ る場合で も 、プ リ フ ェ ッ チ バ ッ フ ァ に後続命令が読み込
まれます。 パ イ プ ラ イ ンが フ ェ ッ チ段を実行で き る よ う にな る と 、 プ リ フ ェ ッ チ バ ッ フ ァ か ら 新 し
い命令を読み込む こ と がで き る ので、 命令 メ モ リ ア ク セ ス の完了を待つ必要はあ り ません。 命令が
自動変更 コ ー ド な ど で実行中に変更 さ れ る場合、 こ の変更 さ れた命令を実行す る前にプ リ フ ェ ッ チ
バ ッ フ ァ を空に し て、 変更前の命令が含まれていない よ う にす る必要があ り ます。 こ の よ う にす る
には、 BRI 4 な ど の同期分岐命令を使用 し ます。
3 段パイ プ ラ イ ン
C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合は、 ハー ド ウ ェ アの使用量を最小限に抑え る た
め、 パ イ プ ラ イ ンはフ ェ ッ チ、 デ コ ー ド 、 実行の 3 段に分かれます。
命令 1
サイ ク ル 1
サイ ク ル 2
サイ ク ル 3
フェ ッチ
デコー ド
実行
フェ ッチ
命令 2
命令 3
サイ ク ル 4
サイ ク ル 5
サイ ク ル 6
デコー ド
実行
実行
実行
フェ ッチ
デコー ド
ス ト ール
ス ト ール
サイ ク ル 7
実行
5 段パイ プ ラ イ ン
C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合は、 最大のパフ ォーマ ン ス を得 る ため、 パ イ プ
ラ イ ンはフ ェ ッ チ (IF)、 デ コ ー ド (OF)、 実行 (EX)、 メ モ リ ア ク セ ス (MEM)、 ラ イ ト バ ッ ク (WB)
の 5 段に分かれます。
命令 1
命令 2
命令 3
サイ ク ル
サイ ク ル
サイ ク ル
サイ ク ル
サイ ク ル
サイ ク ル
サイ ク ル
サイ ク ル
サイ ク ル
1
2
3
4
5
6
7
8
9
IF
OF
EX
MEM
WB
IF
OF
EX
MEM
MEM
MEM
WB
IF
OF
EX
ス ト ール
ス ト ール
MEM
WB
分岐
分岐が実行 さ れ る と 、通常はフ ェ ッ チ段お よ びデ コー ド 段 (プ リ フ ェ ッ チ バ ッ フ ァ も 含む) にあ る 命
令は破棄 さ れ、実行 さ れ る分岐ア ド レ ス か ら 新 し い命令が フ ェ ッ チ パ イ プ ラ イ ン段に読み込まれま
す。 MicroBlaze では分岐の実行に 3 ク ロ ッ ク サ イ ク ルかか り ますが、 その う ち 2 サ イ ク ルがパ イ
プ ラ イ ンの リ フ ィ ルに必要です。 こ のオーバーヘ ッ ド を少 し で も 削減す る ため、 MicroBlaze では遅
延ス ロ ッ ト を使用す る 分岐がサポー ト さ れてい ます。
52
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
パイ プ ラ イ ン アーキテ ク チ ャ
遅延ス ロ ッ ト
遅延ス ロ ッ ト を使用す る 分岐が実行 さ れ る と 、フ ェ ッ チ段階の命令のみが破棄 さ れ、デ コ ー ド 段 (分
岐遅延ス ロ ッ ト ) は完了 さ れます。 こ れに よ り 、 分岐に よ るペナルテ ィ が 2 ク ロ ッ ク サ イ ク ルか ら
1 ク ロ ッ ク サ イ ク ルに軽減 さ れます。 遅延ス ロ ッ ト を使用する 分岐命令には、 命令ニーモニ ッ ク の
後尾に D を追加 し ます。 た と えば、 BNE 命令 (遅延ス ロ ッ ト な し ) では後続命令は実行 さ れません
が、 BNED 命令では分岐 ロ ケーシ ョ ンに移動す る前に後続命令が実行 さ れます。
遅延ス ロ ッ ト には、 IMM、 分岐、 ま たはブ レー ク 命令を含ま ない よ う に し ます。 割 り 込みお よ び外
部ハー ド ウ ェ アのブ レー ク は、 遅延ス ロ ッ ト を使用す る分岐が完了す る ま で保留 さ れます。
不整列ワ ー ド ま たはハーフ ワ ー ド の読み込みお よ び格納な ど、 回復が可能な例外が発生す る可能性
があ る命令は、 遅延ス ロ ッ ト に含め る こ と がで き ます。
遅延ス ロ ッ ト で例外が発生 し た場合、
ESR[DS] ビ ッ ト が設定 さ れ、 例外ハン ド ラ は特殊用途レ ジ ス タ の BTR に格納 さ れてい る 分岐 タ ー
ゲ ッ ト に命令を戻 し ます。 レ ジ ス タ R17 は、 ESR[DS] ビ ッ ト が設定 さ れてい る と 無効にな り 、設定
さ れていなければ、 例外が発生 し た命令の後続のア ド レ ス を含みます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
53
第 1 章 : MicroBlaze アーキテ ク チ ャ
メ モ リ アーキテ ク チ ャ
MicroBlaze の メ モ リ はハーバー ド アーキ テ ク チ ャ 構造であ り 、 命令ア ク セ スお よ びデー タ ア ク セ
ス に別々のア ド レ ス空間が使用 さ れます。 各ア ド レ ス空間は 32 ビ ッ ト の範囲で、 それぞれ 4GB ま
での命令 メ モ リ お よ びデー タ メ モ リ を処理で き ます。命令 メ モ リ お よ びデー タ メ モ リ の範囲は、同
じ 物理 メ モ リ にマ ッ プ し てオーバー ラ ッ プ さ せ る こ と がで き ます。 こ れは、 ソ フ ト ウ ェ アのデバ ッ
グで有益です。
MicroBlaze の命令お よ びデー タ イ ン タ ーフ ェ イ ス は 32 ビ ッ ト 幅で、 ビ ッ グ エンデ ィ ア ン形式で
す。 デー タ メ モ リ へは、 ワー ド 、 ハーフ ワー ド 、 バ イ ト でア ク セ ス で き ます。
デー タ ア ク セ ス は、プ ロ セ ッ サで不整列の例外がサポー ト さ れてい る 場合を除 き 、 ワー ド ア ク セ ス
は ワ ー ド の境界で、 ハーフ ワ ー ド ア ク セ スはハーフ ワー ド の境界で整列 さ せ る必要があ り ます。 命
令ア ク セ ス は、 すべて ワ ー ド の境界で整列 さ せ る必要があ り ます。
MicroBlaze では、I/O へのデー タ ア ク セ ス と メ モ リ へのデー タ ア ク セ スは分離 さ れず、メ モ リ マ ッ
プ さ れた I/O が使用 さ れます。 メ モ リ ア ク セ ス には、次の 3 つの イ ン タ ーフ ェ イ ス を使用で き ます。
•
ロ ーカル メ モ リ バ ス (LMB)
•
プ ロ セ ッ サ ローカル バ ス (PLB) ま たは オンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB)
•
ザ イ リ ン ク ス CacheLink (XCL)
LMB メ モ リ ア ド レ ス範囲は、 PLB、 OPB、 ま たは XCL のア ド レ ス範囲 と 重な ら ない よ う にす る必
要があ り ます。
MicroBlaze では、 ローカル メ モ リ (LMB) へのア ク セ スお よ びキ ャ ッ シ ュ の読み出 し の レ イ テ ン
シは 1 ク ロ ッ ク サ イ ク ルです。 ただ し 、 C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合の
デー タ 側ア ク セ スお よ びデー タ キ ャ ッ シ ュ の読み出 し は 2 ク ロ ッ ク サ イ ク ルです。 デー タ キ ャ ッ
シ ュ 書 き 込みレ イ テ ン シは C_DCACHE_USE_WRITEBACK で決ま り ます。
C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る 場合、 書き 込みレ イ テ ン シは通常 1 サ イ
ク ルです ( キ ャ ッ シ ュ が メ モ リ にア ク セ スする 必要があ る 場合はレ イ テ ン シはそれ以上 )。
C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れてい る 場合、 書き 込みレ イ テ ン シは通常 2 サ
イ ク ルです ( ポ ス テ ッ ド 書き 込みバ ッ フ ァ が フルの場合は、 レ イ テ ン シはそれ以上 )。
MicroBlaze の命令お よ びデー タ キ ャ ッ シ ュ では、 4 ワー ド ま たは 8 ワー ド のキ ャ ッ シ ュ ラ イ ン を
使用で き ます。 キ ャ ッ シ ュ ラ イ ン を長 く する 場合はバ イ ト 長 も 増やす と 、通常シーケ ン シ ャ ル ア ク
セ ス パ タ ーンの ソ フ ト ウ ェ アのパフ ォーマン ス が向上 し ます。 ラ ン ダ ム ア ク セ ス パ タ ーンの ソ フ
ト ウ ェ アでは、キ ャ ッ シ ュ サ イ ズに よ っ てはパフ ォーマン ス が低下す る こ と があ り ます。 こ れは、使
用可能なキ ャ ッ シ ュ ラ イ ンが少な く な り 、 キ ャ ッ シ ュ の ヒ ッ ト 率が下が る ためです。
各 メ モ リ イ ン ターフ ェ イ ス の詳細は、第 2 章 「MicroBlaze の信号 イ ン タ ーフ ェ イ ス」 を参照 し て く
だ さ い。
54
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
特権命令
特権命令
次の命令は、 特権命令です。
•
GET、 PUT、 NGET、 NPUT、 CGET、 CPUT、 NCGET、 NCPUT
•
WIC、 WDC
•
MTS
•
MSRCLR、 MSRSET (C ビ ッ ト のみが影響を受け る場合を除 く )
•
BRK
•
RTID、 RTBD、 RTED
•
BRKI (物理ア ド レ ス 0x8 ま たは 0x18 にジ ャ ンプする 場合を除 く )
ユーザー モー ド で こ れ ら の命令を使用す る と 、 特権命令例外が発生 し ます。
次のいずれかでユーザー モー ド お よび仮想モー ド か ら 特権モー ド に切 り 替わ り ます。
1. ハー ド ウ ェ ア生成 さ れた リ セ ッ ト (デバ ッ グ リ セ ッ ト を含む)
2. ハー ド ウ ェ ア例外
3. マ ス ク 不可のブ レー ク ま たはハー ド ウ ェ ア ブ レー ク
4. 割 り 込み
5. 命令 「BRALID Re, 0x8」 を実行 し 、 ユーザー ベ ク タ 例外を発生 さ せ る
6. ソ フ ト ウ ェ ア ブ レー ク 命令 BRKI を実行 し 、 物理ア ド レ ス 0x8 ま たは 0x18 にジ ャ ンプす る
ハー ド ウ ェ ア生成 さ れた リ セ ッ ト 以外では、 ユーザー
モー ド お よ び仮想モー ド の ス テー タ ス は、
MSR の UMS ビ ッ ト お よ び VMS ビ ッ ト に保存 さ れます。
アプ リ ケーシ ョ ン (ユーザー モー ド ) プ ロ グ ラ ムでは、 BRALID 命令ま たは BRKI 命令を使用 し て
物理ア ド レ ス 0x8 にジ ャ ンプ し 、制御を シ ス テ ム サービ ス ルーチン (特権モー ド プ ロ グ ラ ム ) に転
送 し ます。 こ の命令を実行す る と 、 シ ス テ ム呼び出 し 例外が発生 し ます。 例外ハン ド ラ で、 ど のシ ス
テ ム サービ ス ルーチン を呼び出すかお よ び呼び出 し 側のアプ リ ケーシ ョ ンにそのサービ ス を呼び
出す権限があ る かが確認 さ れます。 権限があ る場合は、 アプ リ ケーシ ョ ン プ ロ グ ラ ムに代わ り 、 例
外ハン ド ラ でシ ス テ ム サービ ス ルーチンへのプ ロ シージ ャ 呼び出 し が実行 さ れます。
シ ス テ ム サービ ス ルーチンに必要な実行環境の設定には、 プ ロ ロ ーグ命令を実行す る必要があ り
ます。 こ れ ら の命令を実行す る と 通常、 プ ロ シージ ャ の情報 ( ア ク テ ィ ブ化の記録) を保持す る ス ト
レージのブ ロ ッ ク が作成 さ れ、ポ イ ン タ がア ッ プデー ト お よ び初期化 さ れ、 シ ス テ ム サービ ス ルー
チンで使用 さ れ る 揮発性レ ジ ス タ が保存 さ れます。 プ ロ ロ ーグ コー ド は実行モジ ュール作成時に リ
ン カに よ っ て挿入で き ます。シ ス テ ム呼び出 し 割 り 込みハン ド ラ ま たはシ ス テ ム ラ イ ブ ラ リ ルーチ
ンの ど ち ら かに、 ス タ ブ コ ー ド と し て含め る こ と も で き ます。
シ ス テ ムサービ ス ルーチンか ら 戻 る と 、 上記の手順で実行 さ れた内容が無効にな り ます。 エ ピ ロ ー
グ コ ー ド を実行す る と 、 ア ク テ ィ ブ化の記録が巻 き 戻 し お よ び解放 さ れ、、 ポ イ ン タ が復元 さ れ、揮
発性レ ジ ス タ が復元 さ れます。 割 り 込みハン ド ラ では、 例外命令 (RTED) か ら アプ リ ケーシ ョ ンへ
の戻 り が実行 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
55
第 1 章 : MicroBlaze アーキテ ク チ ャ
仮想 メ モ リ 管理
MicroBlaze で実行 さ れ る プ ロ グ ラ ムでは、有効ア ド レ ス を使用 し て 4GB の フ ラ ッ ト ア ド レ ス空間
にア ク セ ス し ます。 プ ロ セ ッ サでは、 変換モー ド に応 じ て次の方法で こ のア ド レ ス空間に割 り 込み
ます。
•
実モー ド : 有効なア ド レ ス を使用 し て物理 メ モ リ に直接ア ク セ ス
•
仮想モー ド : 有効なア ド レ スは、 プ ロ セ ッ サの仮想 メ モ リ 管理ハー ド ウ ェ アに よ り 物理ア ド レ
ス に変換 さ れ る
仮想 メ モ リ モー ド では、シ ス テ ム ソ フ ト ウ ェ アでプ ロ グ ラ ムお よ びデー タ を物理ア ド レ ス空間の ど
の位置にで も 再配置で き ます。 ア ク テ ィ ブなプ ロ グ ラ ムお よ びデー タ に領域が必要な場合は、 シ ス
テ ム ソ フ ト ウ ェ アでア ク テ ィ ブでないプ ロ グ ラ ムお よびデー タ を物理 メ モ リ か ら 移動 し ます。
再配置す る と 、 シ ス テ ムが実際に イ ンプ リ メ ン ト す る よ り も 多 く の メ モ リ を プ ロ グ ラ ムで使用で き
る よ う にな り 、 シ ス テ ムの物理 メ モ リ の制限がな く な り ます。 ま た、 ど の物理 メ モ リ ア ド レ ス がほ
かの ソ フ ト ウ ェ ア プ ロ セ スやハー ド ウ ェ ア デバ イ ス に割 り 当て ら れてい る かを知 る 必要 も な く な
り ます。 プ ロ グ ラ ムで使用で き る ア ド レ スは、 プ ロ セ ッ サで物理ア ド レ ス に変換 さ れます。
仮想モー ド では、メ モ リ 保護を詳細に制御で き ます。 1KB 程度の小 さ な メ モ リ ブ ロ ッ ク で も 個別に
不正ア ク セ ス か ら 保護で き ます。 保護お よ び再配置の機能に よ り 、 シ ス テ ム ソ フ ト ウ ェ アでマルチ
タ ス ク がサポー ト さ れます。 マルチ タ ス ク では、 複数のプ ロ グ ラ ムが同時に実行 さ れます。
MicroBlaze では、 仮想モー ド は MMU (Memory Management Unit) に よ り イ ンプ リ メ ン ト さ れま
す。MMU は C_USE_MMU が 3 お よび C_AREA_OPTIMIZED が 0 に設定 さ れてい る 場合に有効
です。 MMU では、有効ア ド レ ス か ら 物理ア ド レ スへの対応付けが制御 さ れ、メ モ リ 保護がサポー ト
さ れます。 こ れ ら の機能を使用す る と 、 仮想 メ モ リ のデマン ド ページ ン グお よ びその他の メ モ リ 管
理ス キーマ を シ ス テ ム ソ フ ト ウ ェ アで イ ンプ リ メ ン ト で き る よ う にな り ます。
MicroBlaze の MMU イ ンプ リ メ ン テーシ ョ ンは、 PowerPC™ 405 に基づいてい ます。 詳細は、
『PowerPC Processor Reference Guide』 を参照 し て く だ さ い。
MMU の機能の概要は次の と お り です。
•
有効ア ド レ ス を物理ア ド レ スへ変換
•
ア ド レ ス変換中の、 ページ レベルでのア ク セ ス の制御
•
ゾーン を使用 し た、 仮想モー ド に よ る保護制御
•
命令ア ド レ スお よ びデー タ ア ド レ ス変換お よび保護の個別の制御
•
1KB、 4KB、 16KB、 64KB、 256KB、 1MB、 4MB、 お よ び 16MB の 8 と お り のページ サ イ ズ
のサポー ト 。 シ ス テ ム ソ フ ト ウ ェ アでは、 ど のページ サ イ ズの組み合わせ も 使用可能です。
•
ソ フ ト ウ ェ アに よ る ページ置 き 換えの制御
実モー ド
プ ロ セ ッ サは、 命令を フ ェ ッ チす る場合お よ び読み込みま たは格納命令でデー タ にア ク セ スす る場
合に メ モ リ を参照 し ます。 プ ロ グ ラ ムでは、プ ロ セ ッ サ よ り 算出 さ れた 32 ビ ッ ト の有効ア ド レ ス を
使用 し て メ モ リ 位置を参照 し ます。 実モー ド が イ ネーブルの場合は、 物理ア ド レ スは有効ア ド レ ス
に等 し く 、プ ロ セ ッ サで物理 メ モ リ へのア ク セ ス に使用 さ れます。 プ ロ セ ッ サは、 リ セ ッ ト さ れ る と
実モー ド で動作 し ます。 実モー ド は、 MSR の VM ビ ッ ト を 0 に し て も 、 イ ネーブルにな り ます。
物理 メ モ リ デー タ ア ク セ ス (読み込みお よ び格納) は、 有効ア ド レ ス を使用 し て実モー ド で実行 さ
れます。 実モー ド では、 シ ス テ ム ソ フ ト ウ ェ アで仮想ア ド レ ス変換を使用で き ませんが、 メ モ リ ア
ク セ ス の完全な保護は、C_USE_MMU > 1 お よ び C_AREA_OPTIMIZED = 0 の場合に イ ンプ リ メ
56
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
仮想 メ モ リ 管理
ン ト さ れます。 実モー ド の メ モ リ 管理の イ ンプ リ メ ン テーシ ョ ンは、仮想モー ド よ り も 容易です。 単
純なエンベデ ッ ド 環境で、 ア ク セ ス保護が必要で仮想ア ド レ ス変換が必要でない場合は、 実モー ド
の使用が適 し ています。
仮想モー ド
仮想モー ド では、図 1-16 に示 さ れ る 手順で、プ ロ セ ッ サで有効ア ド レ ス が物理ア ド レ ス に変換 さ れ
ます。 仮想モー ド は、 MSR の VM ビ ッ ト を 1 に し て も 、 イ ネーブルにな り ます。
0
24
31
Process ID Register
PID
0
n
Effective Page Number
0
8
PID
31
32-Bit Effective Address
Offset
n+8
Effective Page Number
39
40-Bit Virtual Address
Offset
Translation Look-Aside
Buffer (TLB) Look-Up
0
n
Real Page Number
31
Offset
32-Bit Physical Address
UG011_37_021302
図 1-16 : 仮想モー ド のア ド レ ス変換
図 1-16 の各ア ド レ ス には、ページ番号フ ィ ール ド お よ びオ フ セ ッ ト フ ィ ール ド が含まれてい ます。
ページ番号は、MMU で変換 さ れた ア ド レ ス の一部です。 オ フ セ ッ ト は ページへのバ イ ト オ フ セ ッ
ト で、MMU で変換 さ れた も のではあ り ません。 仮想ア ド レ スは、PID レ ジ ス タ に含まれ る プ ロ セ ス
ID (PID) と い う フ ィ ール ド で構成 さ れてい ます (37 ページの 「プ ロ セ ス識別レ ジ ス タ (PID)」 を参
照)。 PID と 有効ページ番号 (EPN) を組み合わせて、仮想ページ番号 (VPN) と 呼びます。 こ の値は、
表 1-34 に示す よ う に、 ページ サ イ ズで決ま り ます。
シ ス テ ム ソ フ ト ウ ェ アでは、 各仮想ページ を物理ページに変換す る際に使用 さ れ る エン ト リ を含
む、 ページ変換テーブルが維持 さ れます。 ページ変換エン ト リ に よ っ て定義 さ れ るページ サ イ ズに
よ り 、 ページ番号フ ィ ール ド お よ びオ フ セ ッ ト フ ィ ール ド のサ イ ズが決ま り ます。 ページサ イ ズが
4KB の場合、 ページ番号フ ィ ール ド は 20 ビ ッ ト 、 オ フ セ ッ ト フ ィ ール ド は 12 ビ ッ ト にな り ます。
こ の場合、 VPN は 28 ビ ッ ト にな り ます。
最 も 頻繁に使用 さ れ る ページ変換は、TLB (Translation Look-Aside Buffer) に格納 さ れます。 仮想ア
ド レ ス の変換時に MMU で、一致す る VPN (PID お よ び EPN) のページ変換エン ト リ が確認 さ れま
す。 表のエン ト リ すべてではな く 、プ ロ セ ッ サ TLB に含まれ る エン ト リ のみが確認 さ れます。 VPN
が一致す る ページ変換エン ト リ が検出 さ れ る と 、 対応す る物理ページ番号がエン ト リ か ら 読み出 さ
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
57
第 1 章 : MicroBlaze アーキテ ク チ ャ
れ、オ フ セ ッ ト と 組み合わせて 32 ビ ッ ト 物理ア ド レ ス が構成 さ れます。 プ ロ セ ッ サでは こ の物理ア
ド レ ス を使用 し て、 メ モ リ を参照 し ます。
シ ス テ ム ソ フ ト ウ ェ アでは PID を使用 し て、プ ロ セ ッ サで実行 さ れてい る ソ フ ト ウ ェ ア プ ロ セ ス (
タ ス ク 、 サブルーチン、 ス レ ッ ド ) を識別 し ます。 個別に コ ンパ イ ル さ れた複数のプ ロ セ ッ サが、 重
な っ た有効ア ド レ ス領域で動作す る こ と があ り ますが、 マルチ タ ス ク がサポー ト さ れてい る 場合は
シ ス テ ム ソ フ ト ウ ェ アで領域が重な ら ない よ う にす る必要があ り ます。 各プ ロ セ ス に PID を割 り
当て る と 、 シ ス テ ム ソ フ ト ウ ェ アで各プ ロ セ ス を、 仮想ア ド レ ス空間が重な ら ない領域に再配置で
き る よ う にな り ます。 仮想ア ド レ ス空間を対応付け る と 、 各プ ロ セ ス を個別に物理ア ド レ ス空間に
変換で き る よ う にな り ます。
ページ変換テーブル
ページ変換テーブルは ソ フ ト ウ ェ アで定義お よ び管理 さ れたデー タ 構造で、 ページ変換に必要な情
報を含んでいます。 ソ フ ト ウ ェ アで管理 さ れ るページ変換の要件は、エンベデ ッ ド シ ス テ ム アプ リ
ケーシ ョ ンが タ ーゲ ッ ト と す る アーキ テ ク チ ャ の ト レー ド オ フ を表 し ます。 エンベデ ッ ド シ ス テ ム
では動作環境が厳密に制御 さ れ、 アプ リ ケーシ ョ ン ソ フ ト ウ ェ アのセ ッ ト が詳細に定義 さ れてい ま
す。 こ の環境では、 次の方法で仮想 メ モ リ 管理が各エンベデ ッ ド シ ス テ ム用に最適化 さ れます。
•
ページ変換テーブルは、 ページ変換エン ト リ の検索効率が上が る よ う に構成す る こ と がで き ま
す。 ほ と ん ど の汎用プ ロ セ ッ サでは、 イ ンデ ッ ク ス付 き の表 (単純な検索方法、 表サ イ ズ大) ま
たはハ ッ シ ュ テーブル (複雑な検索方法、 表サ イ ズ小) のいずれかが イ ンプ リ メ ン ト さ れます。
ソ フ ト ウ ェ アでの検索では、 エンベデ ッ ド シ ス テ ムに適 し た構成を組み合わせて使用で き ま
す。 ページ テーブルのサ イ ズ と ア ク セ ス時間はど ち ら も 最適化可能です。
•
アプ リ ケーシ ョ ン モジ ュール、 デバ イ ス ド ラ イ バ、 シ ス テ ム サービ ス ルーチン、 お よ びデー
タ に個別のページ サ イ ズ を使用で き ます。 個別のページ サ イ ズ を使用す る と メ モ リ の フ ラ グ
メ ン テーシ ョ ンが削減 さ れ、 シ ス テ ム ソ フ ト ウ ェ アで メ モ リ が効率的に使用 さ れます。 サ イ ズ
の大 き なデー タ 構造を 16MB のページに、小型の I/O デバ イ ス ド ラ イ バを 1KB のページに割
り 当て る と い う よ う な例が考え ら れます。
•
ページの置 き 換えは、 ページ変換の ミ ス を最小限に抑え る よ う に調整で き ます。 次に説明す る
よ う に、 最 も 頻繁に使用 さ れ るページ変換は、 TLB (Translation Look-Aside Buffer) に格納 さ
れます。 ど の変換を TLB に格納 し 、新 し い変換が必要にな っ た場合に ど の変換を置 き換え る か
は、 ソ フ ト ウ ェ アで決定 さ れます。 置 き換え手法は、 ページ変換エン ト リ が常に TLB に格納 さ
れた り 削除 さ れた り す る ス ラ ッ シ ュ が発生 し ない よ う に調整で き ます。 ま た、 重要なページ変
換が置 き 換え ら れない よ う に (ページ ロ ッ ク ) 調整で き ます。
ソ フ ト ウ ェ アで管理 さ れ る 統合 64 エン ト リ TLB は、 MMU でア ク セ ス さ れ る命令お よ びデー タ
ページ変換エン ト リ のサブセ ッ ト を キ ャ ッ シ ュ し ます。 ソ フ ト ウ ェ アでシ ス テ ム メ モ リ にあ るペー
ジ変換テーブルか ら エン ト リ を読み出 し て TLB に格納 し ます。 次に、 統合 TLB を詳細に説明 し ま
す。 内部的には、 MMU には命令お よ びデー タ (サ イ ズはそれぞれ C_MMU_ITLB_SIZE お よ び
C_MMU_DTLB_SIZE で設定可) のシ ャ ド ウ TLB も 含まれます。
こ れ ら のシ ャ ド ウ TLB はすべてプ ロ セ ッ サで管理 さ れ ( ソ フ ト ウ ェ アには透過的)、統合 TLB と の
ア ク セ ス競合を最小限に抑え る ために使用 さ れます。
58
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
仮想 メ モ リ 管理
変換ル ッ ク アサイ ド バ ッ フ ァ (TLB)
TLB (Translation Look-Aside Buffer) は MicroBlaze MMU で、 ア ド レ ス変換 (プ ロ セ ッ サが仮想
モー ド で実行 し てい る 場合)、メ モ リ 保護、お よ び格納制御に使用 さ れます。 TLB の各エン ト リ には、
仮想ページ (PID と 有効ページ番号) の識別、物理ページへの変換の指定、ページの保護特性の決定、
お よ びページに関連付け ら れた格納属性の指定のために必要な情報が含まれてい ます。
MicroBlaze の TLB は、 次の 3 つの独立 し た TLB と し て物理的に イ ンプ リ メ ン ト さ れます。
•
UTLB (統合 TLB) : 64 個のエン ト リ を含み、擬似連想です。 命令ページお よ びデー タ ページ変
換は、任意の UTLB エン ト リ に格納で き ます。 UTLB の初期化お よ び管理はすべて ソ フ ト ウ ェ
アで制御 さ れます。
•
ITLB (命令シ ャ ド ウ TLB) : 命令ページ変換エン ト リ を含み、 完全に連想です。 ITLB に格納 さ
れたページ変換エン ト リ は、 UTLB で最後にア ク セ ス さ れた命令ページ変換です。 ITLB は命
令変換 と UTLB のア ッ プデー ト 操作の競合を最小限に抑え る ために使用 さ れます。 ITLB の初
期化お よ び管理はすべてハー ド ウ エアで制御 さ れ、 ソ フ ト ウ ェ アには透過的です。
•
DTLB (データ シ ャ ド ウ TLB) : データ ページ 変換エン ト リ を 含み、 完全に連想です。 DTLB
に格納さ れた ページ 変換エン ト リ は、UTLB で最後にア ク セス さ れた データ ページ 変換です。
DTLB はデータ 変換と UTLB のア ッ プデート 操作の競合を 最小限に抑え る た めに使用さ れ
ま す。 DTLB の初期化およ び管理はすべて ハード ウ エア で制御さ れ、ソ フ ト ウ ェ ア には透過的
です。
図 1-17 に TLB の変換フ ロ ーを示 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
59
第 1 章 : MicroBlaze アーキテ ク チ ャ
デー タ 側
有効ア ド レ スの生成
命令側
有効ア ド レ スの生成
変換はデ ィ ス エーブル
(MSR[VM]=0)
変換は イ ネーブル
(MSR[VM]=1)
ITLB ミ ス
ITLE よ り
実ア ド レ ス取得
(MSR[VM]=0)
変換な し
ルッ クア ッ プ
ルッ クアッ プ
ITLB ヒ ッ ト
変換はデ ィ ス エーブル
(MSR[VM]=1)
DTLB
ITLB
変換な し
変換はイ ネーブル
DTLB ミ ス
DTLB ヒ ッ ト
DTLB よ り
実ア ド レ ス取得
UTLB
ルッ クアップ
UTLB ヒ ッ ト
UTLB ミ ス
命令キ ャ ッ シ ュへ
ア ク セス
命令ま たは
デー タ キ ャ ッ シ ュへ
ア ク セス
UTLB よ り
実ア ド レ ス取得
命令側 TLB ミ ス
ま たは
デー タ 側 TLB ミ ス
例外
ア ド レスを
ア ド レスを
ITLB に転送
DTLB に転送
図 1-17 : TLB ア ド レ ス変換フ ロー
60
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
仮想 メ モ リ 管理
TLB エ ン ト リ のフ ォ ーマ ッ ト
図 1-18 に、 TLB エン ト リ のフ ォ ーマッ ト を 示し ま す。 各 TLB エン ト リ は 68 ビ ッ ト で、 TLBLO (
データ エン ト リ ) と TLBHI (タ グ エン ト リ ) の 2 つの部分で構成さ れま す。
TLBLO :
0
22 23 24
28 29 30 31
↑
↑ ↑
↑
RPN
EX WR
ZSEL
↑ ↑ ↑ ↑
W
I
M G
TLBHI :
0
22
25 26 27 28
↑
↑
TAG
SIZE
35
↑ ↑ ↑
↑
V
TID
E U0
図 1-18 : TLB エ ン ト リ のフ ォ ーマ ッ ト
TLB エン ト リ の内容は、 39 ページの表 1-18 お よ び 42 ページの表 1-19 に示 さ れてい ます。
TLB エン ト リ 内の フ ィ ール ド は次の よ う に分類 さ れます。
•
仮想ページ識別 (TAG、 SIZE、 V、 TID) : ページ変換エン ト リ を識別 し ます。 変換処理中に仮想
ページ番号 と 比較 さ れます。
•
物理ページ識別 (RPN、 SIZE) : 物理 メ モ リ 内にあ る 変換 さ れたページ を識別 し ます。
•
ア ク セ ス制御 (EX、 WR、 ZSEL) : ページで許可 さ れてい る ア ク セ ス の タ イ プを指定 し 、不正ア
ク セ ス か ら ページ を保護す る ために使用 し ます。
•
格納属性 (W、 I、 M、 G、 E、 U0) : デー タ キ ャ ッ シ ュ のキ ャ ッ シ ュ ポ リ シー ( ラ イ ト バ ッ ク や
ラ イ ト ス ルー ) に従っ てい る か ど う か、 ページがキ ャ ッ シ ュ可能か ど う か、 バ イ ト 順 ( エンデ ィ
ア ン ) な ど の格納制御属性を指定 し ます。
表 1-34 に、TLB エン ト リ の SIZE フ ィ ール ド と 変換 さ れたページのサ イ ズの関係を示 し ます。 タ グ
比較で使用 さ れ る ア ド レ ス ビ ッ ト と 物理ア ド レ ス に使用 さ れ る物理ページ番号の ビ ッ ト も ページ
サ イ ズ別に示 さ れてい ます。
表 1-34 : ページ サイ ズによ るページ変換ビ ッ ト 範囲
ページ
サイ ズ
TLBHI の
SIZE
TAG 比較のビ ッ ト 範囲
フ ィ ールド
ページ
オフセ ッ ト
物理ページ番号
0 にする
RPN
ビッ ト
1KB
000
TAG[0:21]、 ア ド レ ス [0:21]
ア ド レ ス [22:31]
RPN[0:21]
4KB
001
TAG[0:19]、 ア ド レ ス [0:19]
ア ド レ ス [20:31]
RPN[0:19]
20:21
16KB
010
TAG[0:17]、 ア ド レ ス [0:17]
ア ド レ ス [18:31]
RPN[0:17]
18:21
64KB
011
TAG[0:15]、 ア ド レ ス [0:15]
ア ド レ ス [16:31]
RPN[0:15]
16:21
256KB
100
TAG[0:13]、 ア ド レ ス [0:13]
ア ド レ ス [14:31]
RPN[0:13]
14:21
1MB
101
TAG[0:11]、 ア ド レ ス [0:11]
ア ド レ ス [12:31]
RPN[0:11]
12:21
4MB
110
TAG[0:9]、 ア ド レ ス [0:9]
ア ド レ ス [10:31]
RPN[0:9]
10:21
16MB
111
TAG[0:7]、 ア ド レ ス [0:7]
ア ド レ ス [8:31]
RPN[0:7]
8:21
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
-
61
第 1 章 : MicroBlaze アーキテ ク チ ャ
TLB ア ク セス
MMU で仮想ア ド レ ス (PID と 有効ア ド レ ス の組み合わせ) が物理ア ド レ ス に変換 さ れ る場合、最初
に、適切なページ変換エン ト リ のシ ャ ド ウ TLB があ る かが確認 さ れます。 エン ト リ が検出 さ れた場
合は、 物理 メ モ リ のア ク セ ス に使用 さ れます。 検出 さ れない場合は、 UTLB にエン ト リ があ る かが
MMU で確認 さ れます。 シ ャ ド ウ TLB ミ ス のために UTLB にア ク セ スす る と 、 その都度遅延が生
じ ます。 ミ ス の レ イ テ ン シは、2 ~ 32 周期です。 DTLB と ITLB が同時に UTLB にア ク セ ス し た場
合は、 DTLB が優先 し ます。
63 ページの図 1-19 には、 シ ャ ド ウ TLB のいずれか ま たは UTLB にページ変換エン ト リ が存在す
る かを確認す る ために MMU で実行 さ れ る論理プ ロ セ ス が示 さ れています。 TLB の有効なエン ト
リ はすべてチ ェ ッ ク さ れます。
TLB エン ト リ で次の条件がすべて満た さ れ る と 、 TLB ヒ ッ ト が発生 し ます。
•
エン ト リ が有効であ る
•
エン ト リ の TAG フ ィ ール ド が、 エン ト リ の SIZE フ ィ ール ド で制御 さ れ る 有効ア ド レ ス の
EPN に一致す る
•
エン ト リ の TID が PID に一致す る
上記の どれか 1 つで も 満た さ れない場合は、 TLB ミ ス が発生 し ます。 TLB ミ ス が発生す る と 、次の
例外が発生 し ます。
TID 値が 0x00 の場合、 TID と PID の比較が MMU で無視 さ れ、 TAG と EA[EPN] のみが比較 さ
れます。 TLB エン ト リ の TID 値が 0x00 の場合は変換がプ ロ セ ス か ら 独立 し てい る ため、すべての
プ ロ セ ス がグ ロ ーバルにア ク セ スす る ページに こ の TID 値を割 り 当て ます。 PID 値が 0x00 の場合
は、 任意のページにア ク セ ス で き る プ ロ セ ス が識別 さ れず、 ページ変換 ヒ ッ ト は TID=0x00 の場合
にのみ発生 し ます。 ソ フ ト ウ ェ アでは、 EA[EPN] と PID の組み合わせが一致す る TLB のエン ト リ
を複数読み込む こ と がで き ますが、 こ れはプ ロ グ ラ ムのエ ラ ー と 解釈 さ れ、 定義 さ れない ビヘ イ ビ
ア を引 き 起 こ し ます。
ヒ ッ ト が発生す る と MMU で、 対応す る TLB エン ト リ か ら RPN フ ィ ール ド が読み込まれます。
フ ィ ール ド のビ ッ ト は、SIZE フ ィ ール ド の値に応 じ て、一部ま たは全部が使用 さ れます (表 1-34 を
参照) 。 SIZE フ ィ ール ド でページ サ イ ズが 256KB に指定 さ れてい る 場合は、 RPN[0:13] は物理
ページ番号を表 し 、物理ア ド レ ス を構成 し ます。 RPN[14:21] は使用 さ れず、TLB エン ト リ の初期化
の際に、 ソ フ ト ウ ェ アで 0 に設定 さ れ る必要があ り ます。 物理ア ド レ ス の残 り の ビ ッ ト には、 EA の
ページ オフ セ ッ ト 部を使用 し ます。 ページ サ イ ズが 256KB の場合、 RPN[0:13] を有効ア ド レ ス の
14 ~ 31 ビ ッ ト と 結合 し 、 32 ビ ッ ト 物理ア ド レ ス を構成 し ます。
物理 メ モ リ にア ク セ スす る前に、 MMU で TLB エン ト リ のア ク セ ス制御フ ィ ール ド が確認 さ れま
す。 こ れ ら の フ ィ ール ド は、 要求 さ れた メ モ リ のア ク セ ス が実行中のプ ロ グ ラ ムに許可 さ れてい る
か ど う かを示 し ます。
ア ク セ ス が許可 さ れていれば、ページへのア ク セ ス方法を決定す る ために、MMU で格納属性フ ィ ー
ル ド がチ ェ ッ ク さ れます。 格納属性フ ィ ール ド では、 メ モ リ ア ク セ ス のキ ャ ッ シ ュ 方法が指定 さ れ
てい ます。
62
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
仮想 メ モ リ 管理
TLB ア ク セス エ ラ ー
TLB ア ク セ ス エ ラ ーが発生する と 、 例外が発生 し ます。 こ の場合、 エ ラ ーの原因 と な る命令に割 り
込みが発生 し 、 エ ラ ーを解決す る ために制御が割 り 込みハン ド ラ に渡 さ れます。 TLB ア ク セ ス のエ
ラ ーの原因には次の 2 つがあ り ます。
•
一致す る TLB エン ト リ が検出 さ れず、 TLB ミ ス が発生 し た場合
•
一致す る TLB エン ト リ は検出 さ れたが、 ページへのア ク セ ス が格納属性かゾーン保護のいず
れかで禁止 さ れてい る 場合
割 り 込みが発生す る と 、 MSR[VM] が 0 にな り 、 プ ロ セ ッ サは実モー ド にな り ます。 実モー ド では、
MMU で実行 さ れ る すべてのア ド レ ス変換お よ び メ モ リ 保護チ ェ ッ ク がデ ィ ス エーブルにな り ま
す。 UTLB は、シ ス テ ム ソ フ ト ウ ェ アに よ り ページ変換エン ト リ で初期化 さ れ る と 、通常は、実モー
ド で実行 し てい る 割 り 込みハン ド ラ を使用 し て管理 さ れます。
図 1-19 に、 TLB エン ト リ の確認の一般的な手順を示 し ます。
No
TLBHI[V]=1
TLB-Entry Miss
Yes
TLBHI[TID]=0x00
Yes
No
Compare
TLBHI[TID] with PID
No Match
TLB-Entry Miss
Match
Compare
TLBHI[TAG] with EA[EPN]
using TLBHI[SIZE]
No Match
TLB-Entry Miss
Match (TLB Hit)
Check Access
Not Allowed
Access Violation
Allowed
Data Reference
Instruction Fetch
Check for
Guarded Storage
Guarded
Storage Violation
Not Guarded
Read TLBLO[RPN]
using TLBHI[SIZE]
Generate Physical Address
from TLBLO[RPN] and Offset
Extract Offset from EA
using TLBHI[SIZE]
UG011_41_033101
図 1-19 : TLB エ ン ト リ 確認の一般的な手順
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
63
第 1 章 : MicroBlaze アーキテ ク チ ャ
次に、 TLB ア ク セ ス エ ラ ーのために例外が発生す る 条件を示 し ます。
デー タ 格納例外
仮想モー ド が イ ネーブル (MSR[VM]=1) で、ページへのア ク セ ス が次の理由のいずれかで許可 さ れ
ない場合、 デー タ 格納例外が発生 し ます。
•
ユーザー モー ド の場合
♦ TLB エン ト リ で、ページへのア ク セ ス を禁 じ る ゾーン フ ィ ール ド (ZPR[Zn]=00) が指定 さ
れてい る 。 こ れは読み込み命令お よ び格納命令の場合です。
♦ TLB エン ト リ で、読み込み専用のページ (TLBLO[WR]=0) が指定 さ れてい る。読み込み専
用でない場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 11) では無効に さ れません。 こ れは格納命
令の場合です。
•
特権モー ド の場合
♦ TLB エン ト リ で、読み込み専用のページ (TLBLO[WR]=0) が指定 さ れてい る。読み込み専
用でない場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 10 お よ び ZPR[Zn], 11) では無効に さ れま
せん。 こ れは格納命令の場合です。
命令格納例外
仮想モー ド が イ ネーブル (MSR[VM]=1) で、ページへのア ク セ ス が次の理由のいずれかで許可 さ れ
ない場合、 命令格納例外が発生 し ます。
•
ユーザー モー ド の場合
♦ TLB エン ト リ で、ページへのア ク セ ス を禁 じ る ゾーン フ ィ ール ド (ZPR[Zn]=00) が指定 さ
れてい る 。
♦ TLB エン ト リ で、実行不可のページ (TLBLO[EX]=0) が指定 さ れてい る。実行不可でない
場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 11) では無効に さ れません。
♦ TLB エン ト リ で、 保護 さ れたページ (TLBLO[G]=1) が指定 さ れてい る 。
•
特権モー ド の場合
♦ TLB エン ト リ で、実行不可のページ (TLBLO[EX]=0) が指定 さ れてい る。実行不可でない
場合は、 ゾーン フ ィ ール ド (ZPR[Zn], 10 お よ び ZPR[Zn], 11) では無効に さ れません。
♦ TLB エン ト リ で、 保護 さ れたページ (TLBLO[G]=1) が指定 さ れてい る 。
デー タ TLB ミ ス例外
仮想モー ド が イ ネーブル (MSR[VM]=1) で、 一致す る有効な TLB エン ト リ が TLB ( シ ャ ド ウ お よ
び UTLB) に存在 し ない場合、 読み込み命令ま たは格納命令でデー タ TLB ミ ス例外が発生 し ます。
命令 TLB ミ ス例外
仮想モー ド が イ ネーブル (MSR[VM]=1) で、 一致す る有効な TLB エン ト リ が TLB ( シ ャ ド ウ お よ
び UTLB) に存在 し ない場合、 命令フ ェ ッ チで命令 TLB ミ ス例外が発生 し ます。
64
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
仮想 メ モ リ 管理
ア ク セス保護
シ ス テ ム ソ フ ト ウ ェ アではア ク セ ス保護を使用 し て、不正ア ク セ ス か ら メ モ リ ロ ケーシ ョ ン を保護
し ます。 ユーザー モー ド と 特権モー ド の両方で、 メ モ リ への読み出 し 、 書 き込み、 命令フ ェ ッ チの
ア ク セ ス が制限 さ れます。 ア ク セ ス保護は、 仮想保護モー ド が イ ネーブルの場合に使用で き ます。
仮想ページの TLB エン ト リ では、 ページで許可 さ れてい る ア ク セ ス の種類が指定 さ れます。 ま た
TLB エン ト リ では、 TLB エン ト リ で指定 さ れた ア ク セ ス制御を無効にす る ゾーン保護レ ジ ス タ の
ゾーン保護フ ィ ール ド も 指定 さ れます。
TLB に よ る ア ク セス保護の制御
各 TLB エン ト リ では、 次の 3 つのア ク セ ス が制御 さ れます。
•
プ ロ セ ス : 各プ ロ セ ス には重複 し ないプ ロ セ ス ID (PID) が割 り 当て ら れてお り 、 こ れを不正ア
ク セ ス か ら の保護に使用 し ます。 シ ス テ ム ソ フ ト ウ ェ アでユーザー モー ド のアプ リ ケーシ ョ
ンが起動す る 際に、 アプ リ ケーシ ョ ンの PID が PID レ ジ ス タ に読み込まれます。 アプ リ ケー
シ ョ ンの実行時に、TLBHI (Translation Look-Aside Buffer High ) の TID フ ィ ール ド が PID と
一致す る TLB エン ト リ のみを使用 し て メ モ リ ア ド レ ス が変換 さ れ る ため、 仮想 メ モ リ の特定
の領域へのアプ リ ケーシ ョ ンのア ク セ ス が、 シ ス テ ム ソ フ ト ウ ェ アに よ り 制限 さ れます。
TLB エン ト リ の TID 値が 0x00 の場合は変換がプ ロ セ ス か ら 独立 し てい る ため、すべてのプ ロ
セ ス がグ ロ ーバルにア ク セ スす る ページに こ の TID 値を割 り 当て ます。
•
実行 : プ ロ セ ッ サでは、 実行可能 (TLBLO[EX]=1) であ る仮想ページか ら フ ェ ッ チ さ れた命令
のみが実行 さ れます。 TLBLO[EX] = 0 の場合命令がページか ら フ ェ ッ チ さ れず、命令格納割 り
込み (ISI) が発生 し ます。 ISI は命令の フ ェ ッ チ時ではな く 、 実行時に発生 し ます。 論理的に
フ ェ ッ チ さ れた命令は実行 さ れずに破棄 さ れため、 ISI は発生 し ません。
ゾーン保護レ ジ ス タ を使用 し て、 実行保護を無効にで き ます。
•
読み出 し /書 き 込み : デー タ は、 書 き込み可 (TLBLO[WR]=1) の仮想ページにのみ書 き 込まれ
ます。 TLBLO[WR] = 0 の場合ページは読み込み専用で、 書 き込みを試み る と デー タ 格納割 り
込み (DSI) が発生 し ます。
ゾーン保護レ ジ ス タ を使用 し て、 書 き込み保護を無効にで き ます。
TLB エ ン ト リ を 使用し て プロ グ ラ ム で の ページ の 読み込みを 禁止する こ と はで き ま せん 。 仮
想モード で は、 ゾ ーン 保護はページ の 読み出し 保護に 使用さ れま す。 ア ク セ ス 不可ゾ ーン を
ZPR[Zn] = 00 に定義す る と 、 TLB エン ト リ ア ク セ ス保護が無効にな り ます。 プ ロ グ ラ ムでのペー
ジ読み出 し は、 ユーザー モー ド で実行 し てい る場合にのみ禁止で き ます。 特権モー ド で実行 し てい
る プ ロ グ ラ ムには、 常にページの読み出 し ア ク セ ス権があ り ます。
ゾーン保護
ゾーン保護は、 TLB エン ト リ で指定 さ れた ア ク セ ス保護を無効にす る ために使用 さ れます。 ゾーン
は、 ア ク セ ス保護設定が同 じ 仮想ページのグループです。 ゾーンには、 任意のページ サ イ ズの組み
合わせで、 任意のページ数を含め る こ と がで き ます。 隣接 し たページ を含め る要件はあ り ません。
ゾーン保護レ ジ ス タ (ZPR) は 32 ビ ッ ト で、最大 16 個の ゾーンに対 し て個別に、無効にす る 保護の
種類を指定 し ます。 ZPR では、 ゾーンの無効指定は 2 ビ ッ ト の フ ィ ール ド と し てエン コ ー ド さ れま
す。 TLB エン ト リ の 4 ビ ッ ト のゾーン選択フ ィ ール ド (TLBLO[ZSEL]) では、 16 個の ZPR (Z0 ~
Z15) ゾーン フ ィ ール ド か ら 1 つを指定 し ます。 ZSEL = 0101 と 指定す る と 、 ゾーン Z5 が選択 さ
れます。
ZPR の ゾーン フ ィ ール ド を変更す る と 、そのゾーンのすべてのページの保護が変更 さ れます。 ZPR
を使用 し ない場合は、 ゾーン内の各ページの変換エン ト リ を個別に変更す る必要があ り ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
65
第 1 章 : MicroBlaze アーキテ ク チ ャ
UTLB 管理
UTLB はプ ロ セ ッ サの MMU と メ モ リ 管理 ソ フ ト ウ ェ ア間の イ ン タ ーフ ェ イ ス の役割を果た し ま
す。 UTLB はシ ス テ ム ソ フ ト ウ ェ アで管理 さ れ、 仮想ア ド レ ス を物理ア ド レ ス に変換す る 方法を
MMU に指示 し ます。 変換エ ラ ーやア ク セ ス違反が原因で問題が発生す る と 、 例外の メ カニ ズ ム を
使用 し て問題が MMU か ら シ ス テ ム ソ フ ト ウ ェ アに送信 さ れます。 MMU で メ モ リ 変換を続行で
き る よ う に、 シ ス テ ム ソ フ ト ウ ェ アか ら 問題を解決す る ための割 り 込みハン ド ラ が提供 さ れます。
ソ フ ト ウ ェ アでは UTLB エン ト リ を、 MFS 命令を使用 し て読み出 し 、 MTS 命令を使用 し て書 き込
みます。 こ れ ら の命令では、UTLB の 64 個のエン ト リ の 1 つに対応す る TLBX レ ジ ス タ イ ンデ ッ
ク ス (0 ~ 63) が使用 さ れます。 タ グ部分 と デー タ 部分は個別に読み出 し お よ び書 き込み さ れ る た
め、エン ト リ に完全にア ク セ スす る には、 ソ フ ト ウ ェ アで MFS 命令ま たは MTS 命令を 2 回実行す
る必要があ り ます。 UTLB での変換の検索には、 TLBSX レ ジ ス タ が使用 さ れます。 TLBSX は有効
ア ド レ ス を使用 し て変換を検出 し 、 対応す る UTLB イ ンデ ッ ク ス を TLBX レ ジ ス タ に読み込みま
す。
UTLB エン ト リ は、MTS 命令で TLB エン ト リ の タ グ部分の有効ビ ッ ト (TLBHI[V]) が 0 に設定 さ
れ、 個別に無効に さ れます。
ページ ア ク セスお よびページ変更の記録
ソ フ ト ウ ェ アでの仮想 メ モ リ の管理では、 次の点を考慮す る必要があ り ます。
•
仮想 メ モ リ 環境では、 物理的に使用可能な メ モ リ よ り も 多 く の メ モ リ が ソ フ ト ウ ェ ア と デー タ
で消費 さ れます。 ソ フ ト ウ ェ アお よ びデー タ ページの一部は、使用 さ れない と き にはハー ド ド
ラ イ ブな ど物理 メ モ リ 領域の外側に格納 さ れ る必要があ り ます。 頻繁に使用 さ れ るページが物
理 メ モ リ に格納 さ れ、 あ ま り 使用 さ れないページはほかの場所に格納 さ れ る のが理想的です。
•
物理 メ モ リ に格納 さ れてい るページ を新 し いページ を格納す る ために置 き換え る場合、 変更 さ
れてい る か ど う かを確認す る必要があ り ます。 変更 さ れてい る場合は、 新 し いページ を読み込
む前に保存す る 必要があ り ます。 変更 さ れていない場合は、 保存す る必要はあ り ません。
•
UTLB に保管で き る ページ変換の数には制限があ り ます。 保管 さ れなかっ た変換は、 ページ変
換テーブルに格納 し ます。 UTLB に保管 さ れていない変換を読み込む場合、破棄する UTLB エ
ン ト リ を シ ス テ ム ソ フ ト ウ ェ アで決定 し ます。 シ ス テ ム ソ フ ト ウ ェ アでの使用頻度が低い変
換を置 き 換え ます。
こ れ ら を効率 よ く 処理す る には、ページ ア ク セ スお よ びページ変更の履歴を把握す る必要があ り ま
す。 MicroBlaze では、 ハー ド ウ ェ アのページ ア ク セ スお よ びページ変更の履歴は記録 さ れません
が、 シ ス テ ム ソ フ ト ウ ェ アで TLB ミ ス例外お よ びデー タ 格納例外を使用 し て、こ の情報を収集で き
ます。 情報が収集 さ れ る と 、 ページ変換テーブルに対応付け ら れたデー タ 構造に格納 さ れます。
ページ ア ク セ ス情報は、 物理 メ モ リ 領域が必要な場合に、 ど のページ を物理 メ モ リ に保持 し 、 ど の
ページ を置 き 換え る かを決定す る ために使用 さ れます。 シ ス テ ム ソ フ ト ウ ェ アでは、TLB エン ト リ
の有効ビ ッ ト (TLBHI[V]) を使用 し てページ ア ク セ ス を監視 し ます。 こ のビ ッ ト は、 ページ変換が
ア ク セ ス さ れていない こ と を示すために、 無効 (TLBHI[V]=0) に初期化す る必要があ り ます。 最初
にページにア ク セ ス し た と き に、 UTLB エン ト リ が無効であ る か、ページ変換が UTLB に存在 し な
いかのいずれかの理由で TLB ミ ス例外が発生 し 、TLB ミ ス ハン ド ラ で UTLB がア ッ プデー ト さ れ
て変換が有効 (TLBHI[V]=1) にな り ます。 有効に設定 さ れた ビ ッ ト は、 ページお よ びページの変換
がア ク セ ス さ れた と い う 記録にな り ます。 TLB ミ ス ハン ド ラ で も 、ページ変換エン ト リ に対応付け
ら れた別のデー タ 構造に情報を記録で き ます。
ページ変更情報は、 現在のページ を新 し いページで上書き し て も よ いか、 ま たはハー ド デ ィ ス ク に
格納す る 必要があ る かを示すために使用 さ れます。 シ ス テ ム ソ フ ト ウ ェ アでは、TLB エン ト リ の書
込み保護ビ ッ ト (TLBLO[WR]) を使用 し て、 ページの変更を監視で き ます。 こ のビ ッ ト は、 ページ
66
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク
変換が変更 さ れていない こ と を示すために、読み込み専用 (TLBLO[WR]=0) に初期化す る必要があ
り ます。 ページへのデー タ の書 き 込みを最初に実行 し た と き に、 上記の よ う にページが既にア ク セ
ス さ れてお り 有効 と 設定 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 ソ フ ト ウ ェ アにページ
へ の 書 き 込 み が 許 可 さ れ て い る 場 合 は、 デ ー タ 格 納 ハ ン ド ラ で ペ ー ジ が 書 き 込 み 可
(TLBLO[WR]=1) に設定 さ れ、 戻 り ます。 書 き込み保護設定ビ ッ ト は、 ページが変更 さ れた と い う
記録にな り ます。 デー タ 格納ハン ド ラ で も 、 ページ変換エン ト リ に対応付け ら れた別のデー タ 構造
に こ の情報を記録で き ます。
ページ変更の追跡は、 最初に仮想モー ド にな っ た場合お よ び新 し いプ ロ セ ス の開始時に有用です。
リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク
MicroBlaze では、 リ セ ッ ト 、割 り 込み、ユーザー例外、ブ レー ク 、お よ びハー ド ウ ェ ア例外がサポー
ト さ れます。 次のセ ク シ ョ ンでは、 各 イ ベン ト の実行フ ロ ーを説明 し ます。
こ れ ら の イ ベン ト の相対的な優先順位は、 次の と お り です。
1. リ セ ッ ト
2. ハー ド ウ ェ ア例外
3. マ ス ク 不可ブ レー ク
4. ブ レー ク
5. 割 り 込み
6. ユーザー ベ ク タ (例外)
表 1-35 に、 ベ ク タ の メ モ リ ア ド レ ス ロ ケーシ ョ ン と ハー ド ウ ェ アで強制 さ れ る戻 り ア ド レ ス の レ
ジ ス タ フ ァ イ ル ロ ケーシ ョ ン を示 し ます。 各ベ ク タ は、 ア ド レ ス範囲全体の分岐を可能にす る た
め、 2 つのア ド レ ス を割 り 当て ます (IMM 命令の後に BRAI 命令が必要)。 ア ド レ ス範囲 0x28 ~
0x4F は、 ザ イ リ ン ク ス が今後の ソ フ ト ウ ェ ア サポー ト 用に予約 し てい ます。 ユーザー アプ リ ケー
シ ョ ン を こ の範囲内のア ド レ ス に割 り 当て る と 、 今後 リ リ ース さ れ る EDK のサポー ト ソ フ ト ウ ェ
ア と 競合す る 可能性があ り ます。
表 1-35 : ベ ク タ と 戻 り ア ド レ スのレ ジ ス タ フ ァ イル ロ ケーシ ョ ン
ベク タ ア ド レス
レ ジ ス タ フ ァ イル
戻り ア ド レス
リ セッ ト
0x00000000 ~ 0x00000004
-
ユーザー ベ ク タ (例外)
0x00000008 ~ 0x0000000C
Rx
割 り 込み
0x00000010 ~ 0x00000014
R14
0x00000018 ~ 0x0000001C
R16
ハー ド ウ ェ ア例外
0x00000020 ~ 0x00000024
R17 ま たは BTR
将来の ソ フ ト ウ ェ ア サポー ト 用に
ザ イ リ ン ク ス が予約
0x00000028 ~ 0x0000004F
-
イ ベン ト
ブ レー ク : マ ス ク 不可ハー ド ウ ェ ア
ブ レー ク : ハー ド ウ ェ ア
ブ レー ク : ソ フ ト ウ ェ ア
LDX お よ び STX 命令 と 共に使用する と 、 セマ フ ォやス ピ ン ロ ッ ク な ど の相互排除機能を イ ンプ リ
メ ン ト す る ために、 こ れ ら の イ ベン ト はすべて予約ビ ッ ト を ク リ アに し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
67
第 1 章 : MicroBlaze アーキテ ク チ ャ
リセッ ト
Reset ま たは Debug_Rst (1) がア ク テ ィ ブにな る と 、 パ イ プ ラ イ ンが空に さ れ、 リ セ ッ ト ベ ク タ ( ア
ド レ ス 0x0) か ら 命令が フ ェ ッ チ さ れます。 こ れ ら の外部 リ セ ッ ト 信号はア ク テ ィ ブ High で、16 サ
イ ク ル以上アサー ト す る 必要があ り ます。
擬似 コ ー ド
PC ← 0x00000000
MSR ← C_RESET_MSR (第 2 章 の 「MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン」 を参照)
EAR ← 0; ESR ← 0; FSR ← 0
PID ← 0; ZPR ← 0; TLBX ← 0
Reservation ←0
ハー ド ウ ェ ア例外
MicroBlaze は、不正な命令、命令お よ びデー タ バ ス のエ ラ ー、不整列ア ク セ ス と いっ た内部エ ラ ー
状態を検出す る よ う に コ ン フ ィ ギ ュ レーシ ョ ンで き ます。 除算の例外は、 ハー ド ウ ェ ア除算器を使
用す る 場合 (C_USE_DIV=1) のみ イ ネーブルにで き ます。 ハー ド ウ ェ ア浮動小数点ユニ ッ ト を使用
す る 場合 (C_USE_FPU>0) は、浮動小数点に関す る例外であ る ア ン ダーフ ロ ー、オーバーフ ロ ー、0
での浮動小数点数除算、 不正な処理、 お よ び非正規化オペ ラ ン ド エ ラ ー も 検出で き ます。
ハー ド ウ ェ ア MMU を使用す る場合は、 メ モ リ 管理に関す る例外であ る不正命令例外、 デー タ 格納
例外、 命令格納例外、 デー タ TLB ミ ス例外、 お よ び命令 TLB ミ ス例外 も 検出で き ます。
ハー ド ウ ェ ア例外が発生す る と 、 パ イ プ ラ イ ンが空に さ れ、 ハー ド ウ ェ ア例外ベ ク タ
(ア ド レ ス
0x20) に分岐 し ます。 実行段の命令は実行 さ れません。
例外が発生す る と 、 汎用レ ジ ス タ R17 が次の よ う にア ッ プデー ト さ れます。
•
MMU 例外 (デー タ格納例外、命令格納例外、デー タ TLB ミ ス例外、命令 TLB ミ ス例外) では、
戻 り 時に例外が発生 し た命令を再実行す る ため、レ ジ ス タ R17 に適切なプ ロ グ ラ ム カ ウ ン タ 値
が読み込まれます。 前に IMM 命令があ る 場合は、こ の値は IMM 命令に戻 る よ う に調整 さ れま
す。 例外が分岐遅延ス ロ ッ ト の命令で発生 し た場合は、 こ の値は分岐命令に戻 る よ う に調整 さ
れます。 前に IMM 命令があ る場合は、 こ の調整 も 実行 さ れます。
•
その他の例外では、 例外が分岐遅延ス ロ ッ ト の命令で発生 し た場合を除 き、 後続の命令のプ ロ
グ ラ ム カ ウ ン タ 値が レ ジ ス タ R17 に読み込まれます。 例外が分岐遅延ス ロ ッ ト の命令で発生
し た場合は、 ESR[DS] ビ ッ ト が設定 さ れ、 例外ハン ド ラ に よ り BTR に格納 さ れてい る 分岐
タ ーゲ ッ ト ア ド レ ス か ら 実行が再開 さ れます。
RTED 命令を実行する と 、 MSR の EE ビ ッ ト と EIP ビ ッ ト が自動的に反転 さ れます。
RTED 命令、 RTBD 命令、 お よ び RTID 命令を実行す る と 、 MSR の VM ビ ッ ト と UM ビ ッ ト が自
動的に反転 さ れます。
1. XMD デバ ッ ガに よ り MDM を介 し て制御 さ れ る リ セ ッ ト 入力
68
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク
例外の優先順位
複数の例外が同時に発生す る場合、 次の優先順位で処理 さ れます。
•
命令バ ス例外
•
命令 TLB ミ ス 例外
•
命令格納例外
•
不正の op コ ー ド の例外
•
特権命令に よ る 例外
•
デー タ TLB ミ ス 例外
•
デー タ 格納例外
•
不整列デー タ ア ク セ ス
•
デー タ バ ス例外
•
除算例外
•
FPU 例外
•
高速シ ンプ レ ッ ク ス リ ン ク の例外
例外の原因
•
高速シ ンプ レ ッ ク ス リ ン ク (FSL) に よ る 例外
制御ビ ッ ト の不一致があ る場合に e ビ ッ ト を 1 に設定 し て get 命令ま たは getd 命令を実行す
る と 発生 し ます。
•
命令バ ス に よ る 例外
命令側プ ロ セ ッ サ ロ ーカル バ ス (PLB) の例外は、 ス レーブのア ク テ ィ ブ エ ラ ー信号
(IPLB_MrdErr) ま たはアービ タ の タ イ ム ア ウ ト 信号 (IPLB_MTimeout) に よ り 発生 し ます。 命
令側オンチ ッ プ ペ リ フ ェ ラ ル バ ス (IOPB) の例外は、 ス レーブのア ク テ ィ ブ エ ラ ー信号
(IOPB_errAck) ま たはアービ タ の タ イ ム ア ウ ト 信号 (IOPB_timeout) に よ り 発生 し ます。 命令
側の ロ ーカル メ モ リ (ILMB) お よ び CacheLink (IXCL) イ ン タ ーフ ェ イ スは、命令バ ス の例外
の原因にはな り ません。
•
不正な op コ ー ド に よ る 例外
命令で主要 op コ ー ド (命令ビ ッ ト 0 ~ 5) が無効の と き に発生 し ます。 ビ ッ ト 6 ~ 31 はチ ェ ッ
ク さ れません。 オプシ ョ ンのプ ロ セ ッ サ命令が イ ネーブルに さ れていない場合は、 不正 と 検出
C_OPCODE_0x0_ILLEGAL が イ ネーブルの場合は、 命令が
さ れます。 オプシ ョ ンの
0x00000000 に等 し い と 発生 し ます。
•
デー タ バ ス に よ る 例外
デー タ 側プ ロ セ ッ サ ロ ーカル バ ス (PLB) の例外は、 ス レーブのア ク テ ィ ブ エ ラ ー信号
(DPLB_MrdErr ま たは DPLB_MWrErr) ま たはアービ タ のタ イ ム アウ ト 信号 (DPLB_MTimeout)
に よ り 発生 し ます。 デー タ側オンチ ッ プ ペ リ フ ェ ラ ル バス (DOPB) の例外は、ス レーブのア ク
テ ィ ブ エ ラ ー信号 (DOPB_errAck) ま たはアービ タ の タ イ ム ア ウ ト 信号 (DOPB_timeout) に よ
り 発生 し ます。 デー タ 側の ロ ーカル メ モ リ (DLMB) お よ び CacheLink (DXCL) イ ン タ ーフ ェ
イ ス は、 デー タ バ ス の例外の原因にはな り ません。
•
不整列デー タ ア ク セ ス に よ る例外
デー タ バ スへのア ド レ ス が 30 ま たは 31 ビ ッ ト の ワー ド ア ク セ ス ま たは 31 ビ ッ ト のハーフ
ワ ー ド ア ク セ ス に よ り 発生 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
69
第 1 章 : MicroBlaze アーキテ ク チ ャ
•
除算例外
整数を 0 で除算す る (idiv ま たは idivu) 場合に例外発生す る か、 ま たは符号付 き整数で除算 し
た結果 (idiv)オーバーフ ロ ーが発生する 場合に例外が発生 し ます。
•
FPU での例外
浮動小数点命令で発生す る ア ン ダーフ ロ ー、 オーバーフ ロー、 0 での除算、 不正な処理、 お よ び
非正規化オペ ラ ン ド エ ラ ーに よ り 発生 し ます。
♦ ア ン ダーフ ロ ーは、 結果が非正規化数の場合に発生 し ます。
♦ オーバーフ ロ ーは、 結果が非数 (NaN) の場合に発生 し ます。
♦ 0 での除算に よ る FPU の例外は、 rB が無限大ではない と き に fdiv の rA オペ ラ ン ド が 0
であ る と 発生 し ます。
♦ 不正な処理は、NaN オペ ラ ン ド の送信ま たは不正な無限大ま たは 0 オペ ラ ン ド の組み合わ
せに よ り 発生 し ます。
•
特権命令に よ る 例外
特権命令を ユーザー モー ド で実行す る と 発生 し ます。
•
デー タ 格納に よ る 例外
メ モ リ のデー タ にア ク セ スす る と メ モ リ 保護違反 と な る場合に発生 し ます。
•
命令格納に よ る 例外
メ モ リ の命令にア ク セ スす る と メ モ リ 保護違反 と な る場合に発生 し ます。
•
デー タ TLB ミ ス に よ る 例外
有効な TLB エン ト リ が存在せず仮想保護モー ド が イ ネーブルの場合に、 メ モ リ のデー タ にア
ク セ スす る と 発生 し ます。
•
命令 TLB ミ ス に よ る 例外
有効な TLB エン ト リ が存在せず仮想保護モー ド が イ ネーブルの場合に、 メ モ リ の命令にア ク
セ スす る と 発生 し ます。
擬似 コ ー ド
ESR[DS] ← 遅延ス ロ ッ ト の例外
if ESR[DS] then
BTR ← タ ーゲ ッ ト PC の分岐
if MMU exception then
if branch preceeded by IMM then
r17 ← PC - 8
else
r17 ← PC - 4
else
r17 ← 無効な値
else if MMU exception then
if instruction preceeded by IMM then
r17 ← PC - 4
else
r17 ← PC
else
r17 ← PC + 4
PC ← 0x00000020
MSR[EE] ← 0, MSR[EIP]← 1
MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0
70
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
リ セ ッ ト 、 割 り 込み、 例外、 ブ レー ク
ESR[EC] ← 例外値
ESR[ESS] ← 例外値
EAR ← 例外値
FSR ← 例外値
Reservation ←0
ブ レーク
ブ レー ク には、 次の 2 種類があ り ます。
•
ハー ド ウ ェ ア (外部) ブ レー ク
•
ソ フ ト ウ ェ ア (内部) ブ レー ク
ハー ド ウ ェ ア ブ レー ク
ハー ド ウ ェ ア ブ レー ク は、 外部ブ レー ク 信号 (Ext_BRK お よ び Ext_NM_BRK 入力ポー ト ) を ア
サー ト す る と 実行 さ れます。 ブ レー ク が発生す る と 、実行段の命令は完了 さ れ、デ コー ド 段の命令は
ブ レー ク ベ ク タ ( ア ド レ ス 0x18) への分岐に置 き換え ら れます。ブ レー ク 戻 り ア ド レ ス (ブ レー ク 発
生時にデ コ ー ド 段にあ っ た命令に関連付け ら れてい る PC) は、 汎用レ ジ ス タ R16 に読み込まれま
す。 ま た、 マシ ン ス テー タ ス レ ジ ス タ (MSR) で BIP (ブ レー ク 実行中) フ ラ グが設定 さ れます。
通常のハー ド ウ ェ ア ブ レー ク (Ext_BRK 入力ポー ト ) は、MSR[BIP] お よび MSR[EIP] が 0 に設定
さ れてい る (実行中のブ レー ク ま たは例外がない) 場合にのみ処理 さ れます。 BIP フ ラ グがア ク テ ィ
ブにな る と 、割 り 込みがデ ィ ス エーブルにな り ます。 マ ス ク 不可ブ レー ク (Ext_NM_BRK 入力ポー
ト ) は即座に処理 さ れます。
RTBD 命令が実行 さ れ る と 、 MSR の BIP ビ ッ ト が ク リ ア さ れます。
Ext_BRK 信号は、ブ レー ク が開始す る ま ではアサー ト さ れた ま ま で、RTBD 命令が実行 さ れ る前に
デ ィ アサー ト さ れ る 必要があ り ます。 Ext_NM_BRK 信号は、 1 ク ロ ッ ク サ イ ク ルだけアサー ト さ
れ る 必要があ り ます。
ソ フ ト ウ ェ ア ブ レー ク
ソ フ ト ウ ェ ア ブ レー ク を実行す る には、 brk お よ び brki 命令を使用 し ます。 ソ フ ト ウ ェ ア ブ レー ク
の詳細は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。
レ イテンシ
ブ レー ク が発生 し てか ら ブ レー ク のサービ ス ルーチンが開始 さ れ る ま でにかか る 時間は、その時点
で実行段にあ る 命令お よ びブ レー ク ベ ク タ を格納 し てい る メ モ リ の レ イ テ ン シに よ っ て異な り ま
す。
擬似 コ ー ド
r16 ← PC
PC ← 0x00000018
MSR[BIP] ← 1
MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0
Reservation ←0
割 り 込み
MicroBlaze では、外部割 り 込み ソ ース (割 り 込み入力ポー ト に接続) が 1 つサポー ト さ れてい ます。
割 り 込みは、 マシ ン ス テー タ ス レ ジ ス タ (MSR) の割 り 込み イ ネーブル ビ ッ ト (IE) が 1 に設定 さ
れてい る 場合にのみ処理 さ れます。 割 り 込みが発生す る と 、 実行段の命令は完了 さ れ、 デ コー ド 段
の命令は割 り 込みベ ク タ ( ア ド レ ス 0x10) への分岐に置 き換え ら れます。割 り 込み戻 り ア ド レ ス (割
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
71
第 1 章 : MicroBlaze アーキテ ク チ ャ
り 込み発生時にデ コ ー ド 段にあ っ た命令に関連付け ら れてい る PC) は、自動的に汎用レ ジ ス タ R14
に読み込まれます。 ま た、 MSR の IE ビ ッ ト が 0 にな り 、 こ れ以降の割 り 込みはデ ィ ス エーブルに
な り ます。 RTID 命令が実行 さ れ る と 、 IE ビ ッ ト が再び 1 に設定 さ れます。
MSR の BIP (ブ レー ク 実行中) ビ ッ ト ま たは EIP (例外実行中) ビ ッ ト のいずれかが 1 に設定 さ れて
い る 場合は、 割 り 込みは無視 さ れます。
パ ラ メ ー タ C_INTERRUPT_IS_EDGE を使用 し 、 外部割 り 込みを レベルま たはエ ッ ジで設定す る
こ と がで き ます。
•
レベルでの割 り 込みを使用す る場合、 MicroBlaze 割 り 込みを取 り 込んで割 り 込みベ ク タ に
ジ ャ ンプす る ま で、 割 り 込み入力はセ ッ ト さ れた ま ま であ る必要があ り ます。 割 り 込みハン ド
ら か ら 返 さ れ る 前に、 ソ フ ト ウ ェ アは割 り 込みを ク リ アにす る必要があ り ます。 ク リ アにな っ
ていなければ、 割 り 込みハン ド ら か ら 返 さ れたに割 り 込みが イ ネーブルにな り 次第、 割 り 込み
は再度取 り 込まれます
•
エ ッ ジでの割 り 込みを使用す る場合、 MicroBlaze で割 り 込み入力エ ッ ジが検出 さ れ ラ ッ チ さ
れます。 つま り 、 こ の入力は 1 ク ロ ッ ク サ イ ク ルでアサー ト さ れ る必要があ り ます。 割 り 込
み入力はアサー ト さ れた ま ま の状態で構い ませんが、 新たな割 り 込みが検出 さ れ る 前に最低 1
ク ロ ッ ク サ イ ク ル間はデ ィ アサー ト さ れてい る 必要があ り ます。
レ イテンシ
割 り 込みが発生 し てか ら ISR (割 り 込みサービ ス ルーチン ) が開始 さ れ る ま でにかか る 時間は、プ ロ
セ ッ サの コ ン フ ィ ギ ュ レーシ ョ ンお よ び割 り 込みベ ク タ を格納 し てい る メ モ リ コ ン ト ロ ー ラ の レ
イ テ ン シに よ っ て異な り ます。 MicroBlaze にハー ド ウ ェ ア除算器が含まれ る 場合、除算命令の実行
中に割 り 込みが発生す る と 、 レ イ テ ン シが最大にな り ます。
擬似 コ ー ド
r14 ← PC
PC ← 0x00000010
MSR[IE] ← 0
MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0
Reservation ←0
ユーザー ベ ク タ (例外)
ユーザー例外ベ ク タ は、 ア ド レ ス 0x8 に配置 さ れてい ます。 ソ フ ト ウ ェ ア フ ローに BRALID
Rx,0x8 命令を挿入す る と 、 ユーザー例外が発生 し ます。 Rx にはど の汎用レ ジ ス タ で も 指定で き ま
すが、 ザ イ リ ン ク ス では R15 を使用 し てユーザー例外の戻 り ア ド レ ス を格納 し 、 RTSD 命令を使用
し てユーザー例外ハン ド ラ か ら 戻 る こ と を推奨 し ます。
擬似 コ ー ド
rx ← PC
PC ← 0x00000008
MSR[UMS] ← MSR[UM], MSR[UM] ← 0, MSR[VMS] ← MSR[VM], MSR[VM] ← 0
Reservation ←0
命令キ ャ ッ シ ュ
概要
MicroBlaze を オプシ ョ ンの命令キ ャ ッ シ ュ と 共に使用 し て、 LMB のア ド レ ス範囲外にあ る コ ー ド
を実行す る 際のパフ ォーマン ス を向上 さ せ る こ と がで き ます。
命令キ ャ ッ シ ュ には、 次の特徴があ り ます。
72
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
命令キ ャ ッ シ ュ
•
ダ イ レ ク ト マ ッ プ方式 (連想度 1)
•
ユーザーがキ ャ ッ シ ュ可能 メ モ リ のア ド レ ス範囲を指定可能
•
キ ャ ッ シ ュ サ イ ズお よび タ グ サ イ ズ を設定可能
•
CacheLink (XCL) イ ン タ ーフ ェ イ ス を使用 し た キ ャ ッ シ ュ
•
4 ま たは 8 ワ ー ド のキ ャ ッ シ ュ ラ イ ン
•
MSR ビ ッ ト を使用 し た キ ャ ッ シ ュ のオン /オフ制御
•
命令キ ャ ッ シ ュ ラ イ ン を無効にす る WIC 命令 ( オプシ ョ ン )
命令キ ャ ッ シ ュの機能
命令キャ ッ シュ の使用時には、メ モリ アド レ ス 空間はキャ ッ シュ 可能なセグ メ ン ト と キャ ッ シュ 不可
能なセグメ ン ト の 2 つに分割さ れま す。 キャ ッ シュ 可能なセグ メ ン ト は、 C_ICACHE_BASEADDR
お よ び C_ICACHE_HIGHADDR の 2 つのパ ラ メ ー タ で定義 さ れます。 こ の範囲内のア ド レ ス は、
すべてキ ャ ッ シ ュ 可能なア ド レ ス セグ メ ン ト に対応 し てい ます。 その他のア ド レ スは、 キ ャ ッ シ ュ
不可能なア ド レ ス です。
キ ャ ッ シ ュ 可能なセグ メ ン ト サ イ ズは 2N であ る 必要があ り ます (N は正の整数)。 C_ICACHE
_BASEADDR お よ び C_ICACHE_HIGHADDR で指定す る範囲は完全な 2 のべ き 乗の範囲に し 、
C_ICACHE_BASEADDR の最下位ビ ッ ト は 0 にす る 必要があ り ます。
キ ャ ッ シ ュ 可能な命令ア ド レ スは、 キ ャ ッ シ ュ ア ド レ スお よ び タ グ ア ド レ ス か ら 構成 さ れます。
MicroBlaze の命令キ ャ ッ シ ュ は 64B ~ 64KB の範囲で設定で き、 こ れは 6 ~ 16 ビ ッ ト のキ ャ ッ
シ ュ ア ド レ ス に対応 し てい ます。 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス を合わせた も のが、 キ ャ ッ
シ ュ 可能な メ モ リ の完全ア ド レ ス に一致す る よ う に設定す る必要があ り ます。 キ ャ ッ シ ュ サ イ ズ を
2KB 未満に指定す る と 、タ グ RAM お よ び命令 RAM の イ ンプ リ メ ン ト には分散 RAM が使用 さ れ
ます。
た と えば、 C_ICACHE_BASEADDR= 0x00300000、 C_ICACHE_HIGHADDR=0x0030ffff、
C_CACHE_BYTE_SIZE=4096、C_ICACHE_LEN=8 の よ う に設定 さ れてい る場合、キ ャ ッ シ ュ可
能な 64KB の メ モ リ では 16 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ、 4KB のキ ャ ッ シ ュ では 12 ビ ッ
ト のバ イ ト ア ド レ ス が使用 さ れ る ため、 必要なア ド レ ス タ グは 16 - 12 = 4 ビ ッ ト です。 こ の場合、
1024 ワー ド の命令の格納に RAMB16 が 2 個、128 個のキ ャ ッ シ ュ ラ イ ン (4 ビ ッ ト の タ グ + 8 ワ ー
ド 有効ビ ッ ト + 1 ラ イ ン有効ビ ッ ト ) エン ト リ に RAMB16 が 1 個必要 と な る ので、 合計で 3 個の
RAMB16 プ リ ミ テ ィ ブが必要です。
74 ページの図 1-20 に、 命令キ ャ ッ シ ュ の構成を示 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
73
第 1 章 : MicroBlaze アーキテ ク チ ャ
命令ア ド レ ス ビ ッ ト
0
3031
タグ ア ド レス
ラ イ ン ア ド レス
タグ
タグ
- -
キャ ッ シュ ア ド レス
Cache_Hit
=
RAM
有効 ( ワー ド お よび ラ イ ン )
ワー ド ア ド レ ス
命令
Cache_instruction_data
RAM
図 1-20 : 命令キ ャ ッ シ ュの構成
命令キ ャ ッ シ ュの動作
命令が フ ェ ッ チ さ れ る ご と に、 命令ア ド レ ス がキ ャ ッ シ ュ可能なセグ メ ン ト に属す る も のであ る か
が検出 さ れます。 ア ド レ ス がキ ャ ッ シ ュ 不可能な場合は、 キ ャ ッ シ ュ コ ン ト ロ ー ラ では命令が無視
さ れ、 PLB、 OPB、 ま たは LMB で命令が実行 さ れます。 ア ド レ ス がキ ャ ッ シ ュ可能な場合は、 タ
グ メ モ リ でル ッ ク ア ッ プが実行 さ れ、要求 さ れた ア ド レ ス がキ ャ ッ シ ュ に含まれ る か ど う かが確認
さ れます。 ワ ー ド お よ び ラ イ ンの有効ビ ッ ト が設定 さ れてお り 、 タ グ ア ド レ ス が命令ア ド レ ス の タ
グ ア ド レ ス セグ メ ン ト と 一致すれば、ル ッ ク ア ッ プが成功 し た こ と にな り ます。 キ ャ ッ シ ュ ミ ス の
場合、 キ ャ ッ シ ュ コ ン ト ロ ー ラ は命令側の CacheLink (IXCL) に新 し い命令を要求 し 、 メ モ リ コ ン
ト ロ ー ラ か ら 戻 さ れ る 関連キ ャ ッ シ ュ ラ イ ン を待ち ます。
命令キ ャ ッ シ ュの ソ フ ト ウ ェ ア サポー ト
MSR ビ ッ ト
MSR の ICE ビ ッ ト は、 キ ャ ッ シ ュ の イ ネーブル、 デ ィ ス エーブルを制御 し ます。
キ ャ ッ シ ュ がデ ィ ス エーブルの場合、 デフ ォ ル ト ではキ ャ ッ シ ュ の内容が保持 さ れます。 WIC 命令
ま たは MicroBlaze のハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク を使用する と 、キ ャ ッ シ ュ ラ イ ン を無効にで
き ます。
WIC 命令
オプシ ョ ンの WIC 命令 (C_ALLOW_ICACHE_WR=1) を使用す る と 、命令キ ャ ッ シ ュ に含まれ る
キ ャ ッ シ ュ ラ イ ン を アプ リ ケーシ ョ ンか ら 無効にで き ます。 詳細は、第 4 章 「MicroBlaze 命令セ ッ
ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。
74
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
デー タ キ ャ ッ シ ュ
デー タ キ ャ ッ シ ュ
概要
MicroBlaze は、 オプシ ョ ンのデー タ キ ャ ッ シ ュ を使用 し てパフ ォーマン ス を向上 さ せ る こ と がで
き ます。 キ ャ ッ シ ュ メ モ リ の範囲には、 LMB ア ド レ ス範囲内のア ド レ ス を含めないで く だ さ い。
デー タ キ ャ ッ シ ュ には、 次の特徴があ り ます。
•
ダ イ レ ク ト マ ッ プ方式 (連想度 1)
•
ラ イ ト スルーま たは ラ イ ト バ ッ ク
•
ユーザーがキ ャ ッ シ ュ可能 メ モ リ のア ド レ ス範囲を指定可能
•
キ ャ ッ シ ュ サ イ ズお よび タ グ サ イ ズ を設定可能
•
CacheLink (XCL) イ ン タ ーフ ェ イ ス を使用 し た キ ャ ッ シ ュ
•
4 ま たは 8 ワ ー ド のキ ャ ッ シ ュ ラ イ ン
•
MSR ビ ッ ト を使用 し た キ ャ ッ シ ュ のオン /オフ制御
•
デー タ キ ャ ッ シ ュ ラ イ ン を無効にす る、 ま たはフ ラ ッ シ ュす る WDC 命令 ( オプシ ョ ン )
デー タ キ ャ ッ シ ュ の機能
デー タ キ ャ ッ シ ュ の使用時には、メ モ リ ア ド レ ス空間はキ ャ ッ シ ュ可能なセグ メ ン ト と キ ャ ッ シ ュ
不可能なセグ メ ン ト の 2 つに分割 さ れます。 キ ャ ッ シ ュ 可能な領域は、 C_DCACHE_BASEADDR
お よ び C_DCACHE_HIGHADDR の 2 つのパ ラ メ ー タ で定義 さ れます。 こ の範囲内のア ド レ ス は、
すべてキ ャ ッ シ ュ 可能なア ド レ ス空間に対応 し てい ます。 その他のア ド レ スは、 キ ャ ッ シ ュ不可能
なア ド レ ス です。
キ ャ ッ シ ュ 可能なセグ メ ン ト サ イ ズは 2N であ る 必要があ り ます (N は正の整数)。 C_DCACHE
_BASEADDR お よ び C_DCACHE_HIGHADDR で指定す る範囲は完全な 2 のべ き 乗の範囲に し 、
C_DCACHE_BASEADDR の最下位ビ ッ ト は 0 にす る 必要があ り ます。
図 1-21 に、 デー タ キ ャ ッ シ ュ の構成を示 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
75
第 1 章 : MicroBlaze アーキテ ク チ ャ
デー タ ア ド レ ス ビ ッ ト
0
タグ ア ド レス
ア ド レス
タグ
タグ
RAM
有効
キ ャ ッ シ ュ ワー ド ア ド レ ス
=
3031
- -
Cache_Hit
Load_Instruction
ア ド レス
デー タ
Cache_data
RAM
図 1-21 : デー タ キ ャ ッ シ ュの構成
キ ャ ッ シ ュ 可能なデー タ ア ド レ ス は、 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス で構成 さ れてい ます。
MicroBlaze のデー タ キ ャ ッ シ ュ は 64B ~ 64KB の範囲で設定で き 、こ れは 6 ~ 16 ビ ッ ト のキ ャ ッ
シ ュ ア ド レ ス に対応 し ています。 キ ャ ッ シ ュ ア ド レ ス と タ グ ア ド レ ス を合わせた も のが、 キ ャ ッ
シ ュ 可 能 な メ モ リ の 完 全 ア ド レ ス に 一 致 す る よ う に 設 定 す る 必 要 が あ り ま す。
C_AREA_OPTIMIZED がセ ッ ト さ れ C_DCACHE_USE_WRITEBACK がセ ッ ト さ れていない場
合、 ブ ロ ッ ク RAM が常にデー タ RAM の イ ンプ リ メ ン ト に使用 さ れ る の を除 き 、 2 kB 以下の
キ ャ ッ シ ュ サ イ ズ を選択す る場合は、 タ グ RAM お よ びデー タ RAM の イ ンプ リ メ ン ト には分散
RAM が使用 さ れます。
た と えば、 C_DCACHE_BASEADDR=0x00400000、 C_DCACHE_HIGHADDR=0x00403fff、
C_DCACHE_BYTE_SIZE=2048、 お よび C_DCACHE_LEN=4 の よ う に設定 さ れてい る場合、
キ ャ ッ シ ュ 可能な 16KB の メ モ リ では 14 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ、2KB のキ ャ ッ シ ュ
では 11 ビ ッ ト のバ イ ト ア ド レ ス が使用 さ れ る ため、必要な ア ド レ ス タ グは 14 - 11 = 3 ビ ッ ト です。
こ の場合、 512 ワ ー ド のデー タ の格納に RAMB16 が 1 個、 128 個のキ ャ ッ シ ュ ラ イ ン (3 ビ ッ ト の
タ グ + 4 ワ ー ド 有効ビ ッ ト + 1 ラ イ ン有効ビ ッ ト ) エン ト リ に RAMB16 が 1 個必要 と な る ので、合
計で 2 個の RAMB16 プ リ ミ テ ィ ブが必要です。
デー タ キ ャ ッ シ ュ の動作
MicroBlaze のデー タ キ ャ ッ シ ュ 、 ラ イ ト バ ッ ク 、 ま たは ラ イ ト スルーで使用 さ れ る キ ャ ッ シ ュ ポ
リ シーは、 パ ラ メ ー タ C_DCACHE_USE_WRITEBACK で決ま り ます。 こ のパ ラ メ ー タ が設定 さ
れてい る 場合 ラ イ ト バ ッ ク プ ロ ト コ ルが イ ンプ リ メ ン ト さ れ、 設定 さ れていない場合は ラ イ ト ス
ルーが イ ンプ リ メ ン ト さ れます。 し か し 、 MMU (C_USE_MMU > 1、 C_AREA_OPTIMIZED = 0、
C_DCACHE_USE_WRITEBACK = 1) で コ ン フ ィ ギ ュ レーシ ョ ン さ れ る場合、 仮想モー ド の
キ ャ ッ シ ュ ポ リ シーは TLB エン ト リ の W 保存属性で決ま り 、ラ イ ト バ ッ ク は実モー ド で使用 さ れ
ます。
ラ イ ト バ ッ ク プ ロ ト コ ルの場合、 キ ャ ッ シ ュ可能範囲内にあ る ア ド レ スへ保存す る と 常にキ ャ ッ
シ ュ デー タ が更新 さ れます。タ ーゲ ッ ト ア ド レ ス ワ ー ド がキ ャ ッ シ ュ にない場合 (つま り ア ク セ ス
がキ ャ ッ シ ュ ミ ス ) で、 キ ャ ッ シ ュ の ロ ケーシ ョ ンに メ モ リ に ま だ書 き 込まれていないデー タ があ
る 場合、 新 し いデー タ でキ ャ ッ シ ュ が更新 さ れ る 前に、 古いデー タ はデー タ CacheLink (DXCL) を
使用 し 外部 メ モ リ に書 き込まれます。 キ ャ ッ シ ュ ラ イ ン全体を書 き込む必要があ る場合バース ト
76
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
デー タ キ ャ ッ シ ュ
キ ャ ッ シ ュ ラ イ ン書 き 込みが使用 さ れますが、 それ以外は、 シ ン グル ワ ー ド 書 き込みが使用 さ れま
ミ ス があ っ た場合は、 ア ド レ スは まず
す。 バ イ ト ま たはハーフ ワ ー ド 保存の場合、 キ ャ ッ シ ュ
CacheLink を使用 し て要求 さ れ、 ワ ー ド 保存に よ り キ ャ ッ シ ュ が更新 さ れます。
ラ イ ト ス ルー プ ロ ト コ ルを使用 し 、 キ ャ ッ シ ュ 可能な範囲のア ド レ ス に格納する こ と に よ り 、 デー
タ CacheLink を使用 し て同等のバ イ ト 、 ハーフ ワ ー ド 、 ま たは ワ ー ド を外部 メ モ リ に書 き 込む こ と
が可能です。 書 き 込みでは、 タ ーゲ ッ ト ア ド レ ス ワー ド がキ ャ ッ シ ュ 内の場合 ( キ ャ ッ シ ュ ヒ ッ ト
の場合) に、キ ャ ッ シ ュ デー タ も 更新 さ れます。 キ ャ ッ シ ュ ミ ス の場合は、キ ャ ッ シ ュ に関連キ ャ ッ
シ ュ ラ イ ンは読み込まれません。
キ ャ ッ シ ュ の イ ネーブル時に、デー タ を キ ャ ッ シ ュ可能な範囲のア ド レ ス か ら 読み出す と 、要求デー
タ が現在キ ャ ッ シ ュ に含まれてい る かが確認 さ れます。 含まれてい る 場合 ( キ ャ ッ シ ュ ヒ ッ ト の場
合) は要求デー タ がキ ャ ッ シ ュ か ら 取得 さ れ、 含まれていない場合 ( キ ャ ッ シ ュ ミ ス の場合) はデー
タ CacheLink を使用 し て ア ド レ ス が要求 さ れ、パ イ プ ラ イ ン処理は要求ア ド レ ス に関連す る キ ャ ッ
シ ュ ラ イ ンが外部 メ モ リ コ ン ト ロ ー ラ か ら 戻 さ れ る ま で ス ト ール し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
77
第 1 章 : MicroBlaze アーキテ ク チ ャ
デー タ キ ャ ッ シ ュ の ソ フ ト ウ ェ ア サポー ト
MSR ビ ッ ト
MSR の DCE ビ ッ ト は、 キ ャ ッ シ ュ の イ ネーブル、 デ ィ ス エーブルを制御 し ます。 デ ィ ス エーブル
にす る 場合は、 PLB ま たは OPB か ら 読み出 し を開始す る前に、 キ ャ ッ シ ュ可能な範囲の書 き込み
がすべて外部 メ モ リ で完了 し てい る こ と を確認す る必要があ り ます。 確認す る には、 キ ャ ッ シ ュ を
オ フ にす る 直前にセマ フ ォ に書 き込み、 書 き込みが完了す る ま でループ ポー リ ン グ を実行 し ます。
キ ャ ッ シ ュ がデ ィ ス エーブルの場合、 デフ ォ ル ト ではキ ャ ッ シ ュ の内容が保持 さ れます。
WDC 命令
オプシ ョ ンの WDC 命令 (C_ALLOW_DCACHE_WR=1) を使用する と 、 アプ リ ケーシ ョ ンに含ま
れ る デー タ キ ャ ッ シ ュ のキ ャ ッ シ ュ ラ イ ン を無効にす る か、 ま たはフ ラ ッ シ ュ で き ます。 詳細は、
第 4 章 「MicroBlaze 命令セ ッ ト アーキテ ク チ ャ 」 を参照 し て く だ さ い。
浮動小数点ユニ ッ ト (FPU)
概要
MicroBlaze の浮動小数点ユニ ッ ト は、 IEEE 754 規格に準拠 し てい ます。
•
IEEE 754 の単精度浮動小数点フ ォーマ ッ ト (無限の定義、 NaN (Not A Number)、 お よ び 0 を
含む) を使用
•
加算、 減算、 乗算、 除算、 比較、 変換お よ び平方根命令を サポー ト
•
最 も 近い値に繰 り 上げ/繰 り 下げ る モー ド (Round-to-Nearest) を イ ンプ リ メ ン ト
•
ア ン ダーフ ロ ー、 オーバーフ ロ ー、 ゼ ロ での除算、 お よ び無効な操作に対す る ス テー タ ス ビ ッ
ト を生成
パフ ォーマ ン ス を向上 さ せ る ため、 次の よ う な非標準的な簡略化 も 適用 さ れてい ます。
•
非正規化 (1) オペ ラ ン ド はサポー ト さ れません。 非正規化値に対 し てハー ド ウ ェ ア浮動小数点の
操作が実行 さ れ る と 、quiet NaN が返 さ れ、FSR の非正規化オペ ラ ン ド エ ラ ー ビ ッ ト が 1 にな
り ます。 詳細は、 36 ページの 「浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ (FSR)」 を参照 し て く
だ さ い。
•
非正規化値の結果は、符号付き の 0 と し て格納 さ れ、FSR のア ン ダーフ ロ ー ビ ッ ト が 1 にな り
ます。 こ の方法は、 FTZ (Flush-to-Zero) と 呼ばれます。
•
quiet NaN に対する 操作では、NaN オペ ラ ン ド の 1 つではな く 固定の NaN (0xFFC00000) が返
さ れます。
•
浮動小数点の操作に よ り オーバーフ ロ ーが発生 し た場合は、 常に符号付 き ∞ が返 さ れます。
1. (1.17549 X 10-38 > n > 0 ) ま たは ( 0 > n > -1.17549 X 10-38) の範囲内にあ る 値 n の よ う に 0 に非常に近 く 、 完全精
度で も 表す こ と がで き ない値。
78
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
浮動小数点ユニ ッ ト (FPU)
フ ォ ーマ ッ ト
IEEE 754 の単精度浮動小数点値は、 次の 3 つの フ ィ ール ド か ら 構成 さ れてい ます。
1. 1 ビ ッ ト の符号 (sign)
2. 8 ビ ッ ト の指数部 (exponent) - ゲ タ ば き 表現
3. 23 ビ ッ ト の仮数部 (fraction) - mantissa ま たは significand
こ れ ら の フ ィ ール ド は、 図 1-22 に示す よ う に 32 ビ ッ ト ワー ド に格納 さ れます。
0
1
9
31
↑
↑
↑
符号
指数部
仮数部
図 1-22 : IEEE 754 の単精度浮動小数点フ ォ ーマ ッ ト
MicroBlaze では、 浮動小数点値 v は次の よ う に解釈 さ れます。
1. exponent = 255、 fraction <> 0 の場合、 符号ビ ッ ト にかかわ ら ず v= NaN と な り ます。
2. exponent = 255、 fraction = 0 の場合、 v= (-1)sign X ∞ と な り ます。
3. 0 < exponent < 255 の場合、 v = (-1)sign X 2(exponent - 127) X (1.fraction)
4. exponent = 0、 fraction <> 0 の場合、 v = (-1)sign X 2-126 X (0.fraction)
5. exponent = 0、 fraction = 0 の場合、 v = (-1)sign X 0 と な り ます。
実際には 3 と 5 のみが有益で、その他の値ではエ ラ ーが発生す る か、 32 ビ ッ ト では完全な精度で表
現で き ません。
繰 り 上げ/繰 り 下げ
MicroBlaze の FPU では、 IEEE 754 で指定 さ れた、 最 も 近い値に繰 り 上げ/繰 り 下げ る デフ ォ ル ト
のモー ド (Round-to-Nearest) のみが イ ンプ リ メ ン ト さ れます。 こ のモー ド では、 浮動小数点の操作
結果は、 無限の精度の結果に最 も 近い単精度値 と な り ます。 同程度に近い値が 2 つあ る 場合は、 最
下位ビ ッ ト が 0 の も のが使用 さ れます。
操作
MicroBlaze FPU 操作では、 専用の浮動小数点レ ジ ス タ フ ァ イ ルではな く 、 プ ロ セ ッ サの汎用レ ジ
ス タ が使用 さ れます。 「汎用レ ジ ス タ 」 を参照 し て く だ さ い。
演算
FPU では、 次の浮動小数点演算が イ ンプ リ メ ン ト さ れます。
•
加算 (fadd)
•
減算 (fsub)
•
乗算 (fmul)
•
除算 (fdiv)
•
平方根 (fsqrt、 C_USE_FPU = 2 の場合使用可能)
比較
FPU では、 次の浮動小数点比較が イ ンプ リ メ ン ト さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
79
第 1 章 : MicroBlaze アーキテ ク チ ャ
•
小な り (fcmp.lt)
•
等価 (fcmp.eq)
•
以下 (fcmp.le)
•
大な り (fcmp.gt)
•
非等価 (fcmp.ne)
•
以上 (fcmp.ge)
•
順序付けな し (fcmp.un) - NaN で使用
変換
FPU では、 次の変換が イ ンプ リ メ ン ト さ れます (C_USE_FPU = 2 の場合)。
•
符号付 き 整数か ら 浮動小数点への変換 (flt)
•
浮動小数点か ら 符号付 き整数への変換 (fint)
例外
MicroBlaze の浮動小数点ユニ ッ ト は、 通常のハー ド ウ ェ ア例外 メ カ ニ ズ ム を使用 し ます。 例外が イ
ネーブルの場合、 IEEE 規格で指定 さ れ る状態 ( ア ン ダーフ ロ ー、 オーバーフ ロ ー、 0 での除算、 不
正な操作) お よび MicroBlaze 特定の例外であ る非正規化オペ ラ ン ド エ ラ ーに よ り 例外処理が実行
さ れます。
浮動小数点の例外が発生す る と 、デス テ ィ ネーシ ョ ン レ ジ ス タ (Rd) への書 き込みが禁止 さ れます。
こ れに よ り 、 破損 し ていないレ ジ ス タ フ ァ イ ルが浮動小数点例外ハン ド ラ に よ り 処理 さ れます。
ソ フ ト ウ ェ ア サポー ト
GCC を基本に し た EDK コ ンパ イ ラ シ ス テ ムは、 MicroBlaze API に準拠 し た浮動小数点ユニ ッ ト
を サポー ト し てい ます。 コ ンパ イ ラ の フ ラ グは、XPS ま たは SDK を使用す る場合、シ ス テ ムにあ る
FPU の タ イ プに基づき 自動的に GCC コ マン ド ラ イ ンに追加 さ れます。
倍精度の操作はすべて ソ フ ト ウ ェ アでエ ミ ュ レー ト さ れます。 xil_printf() では浮動小数点の出力は
サポー ト さ れていないので注意 し て く だ さ い。 標準 C ラ イ ブ ラ リ の printf() お よ び関連関数では浮
動小数点出力がサポー ト さ れていますが、 プ ロ グ ラ ムの コー ド サ イ ズが大き く な り ます。
ラ イ ブ ラ リ およびバイ ナ リ の互換性
EDK コ ンパ イ ラ シ ス テ ムには、ソ フ ト ウ ェ アの浮動小数点 C ラ ン タ イ ム ラ イ ブ ラ リ のみが含まれ
てい ます。 ハー ド ウ ェ ア FPU を利用す る には、ラ イ ブ ラ リ を適切な コ ンパ イ ラ オプシ ョ ン を設定 し
て再 コ ンパ イ ルす る 必要があ り ます。
別の コ ンパ イ ルが使用 さ れ る ケース では、 ビル ド 内の FPU の コ ンパ イ ラ フ ラ グが同 じ であ る こ と
を確認す る こ と が重要です。
オペ レー タ レ イ テ ン シ
FPU でサポー ト さ れてい る さ ま ざ ま な操作の レ イ テ ン シは、 第 4 章 「MicroBlaze 命令セ ッ ト アー
キ テ ク チ ャ 」 に リ ス ト さ れてい ます。 FPU 命令はパ イ プ ラ イ ン化 さ れていないため、 1 度に 1 つの
操作のみが行われます。
80
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
ソ フ ト ウ ェ ア サポー ト
C 言語のプ ログ ラ ミ ング
低位のアセ ンブ リ 言語プ ロ グ ラ ミ ン グ を使用せずに FPU を最大限に活用する には、C コ ンパ イ ラ で
ど の よ う に ソ ース コ ー ド が解釈 さ れ る かを考慮する こ と が重要です。 同 じ アルゴ リ ズ ム を さ ま ざ ま
な方法で書 く こ と がで き ますが、 書 き 方に よ っ て効率の良 し 悪 し が決ま る こ と も あ り ます。
即値定数
C 言語の浮動小数点の定数はデフ ォル ト で倍精度です。 単精度の FPU を使用す る場合、 間違っ た
コ ー ド 記述を し て し ま う と 、 ソ フ ト ウ ェ ア エ ミ ュ レーシ ョ ン ルーチンで、ネ イ テ ィ ブの単精度命令
ではな く 倍精度が使用 さ れて し ま う 場合があ り ます。 こ れを回避す る には、 演算式の即値定数を単
精度に指定 し ます。
例:
float x = 0.0;
…
x += (float)1.0; /* float addition */
x += 1.0F;
/* alternative to above */
x += 1.0;
/* warning - uses double addition! */
コ ンパ イ ラ フ ラ グ -fsingle-precision-constants を使用す る こ と で、GNU C コ ンパ イ ラ で浮動小数点
定数が単精度 と し て処理 さ れ る よ う に (ANSI C 標準 と は異な る ) 設定す る こ と がで き ます。
不要な型変換を避ける
浮動小数点 と 整数の変換はハー ド ウ ェ アでサポー ト さ れてい ますが、 C_USE_FPU が 2 に設定 さ れ
てい る 場合、 で き る 限 り 変換を避け る のが最善です。
次の例は 「悪い例」 で、 浮動小数点で 1 か ら 10 の整数の平方和が計算 さ れてい ます。
float sum, t;
int i;
sum = 0.0f;
for (i = 1; i <= 10; i++) {
t = (float)i;
sum += t * t;
}
上述の コ ー ド では、各ループの繰 り 返 し で整数か ら 浮動小数点への型変換が必要です。 こ れは、次の
よ う に書 き 換え る こ と がで き ます。
float sum, t;
int i;
t = sum = 0.0f;
for(i = 1; i <= 10; i++) {
t += 1.0f;
sum += t * t;
}
上記の 2 つの コ ー ド 例で異な る結果が出力 さ れ る場合があ る ため (t の値が非常に大 き く な る な ど )、
通常、 コ ンパ イ ラ では こ の最適化を自由には実行で き ません。
平方根 ラ ン タ イ ム ラ イ ブ ラ リ 関数
標準 C ラ ン タ イ ム数学 ラ イ ブ ラ リ 関数は、 倍精度の演算を行い ます。 単精度の FPU を使用す る場
合、平方根関数 sqrt() の呼び出 し で、 FPU 命令ではな く 非効率なエ ミ ュ レーシ ョ ン ルーチンが使用
さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
81
第 1 章 : MicroBlaze アーキテ ク チ ャ
#include <math.h>
…
float x=-1.0F;
…
x = sqrt(x); /* uses double precision */
こ こ では math.h ヘ ッ ダが コ ンパ イ ラ か ら の警告 メ ッ セージ を避け る ために含まれてい ます。
単精度デー タ 型で使用 さ れ る場合、結果が倍精度に変換 さ れ、 FPU を使用 し ない ラ ン タ イ ム ラ イ ブ
ラ リ コ ールが呼び出 さ れます。 そ し て、 浮動小数点への切捨てが実行 さ れます。
こ れを解決す る には、 ANSI でない関数 sqrtf() を使用 し ます。 こ れは単精度を使用 し 、 FPU を使用
し て実行す る こ と がで き ます。
例:
#include <math.h>
…
float x=-1.0F;
…
x = sqrtf(x); /* uses single precision */
こ の コー ド を コ ンパ イ ルす る場合、 コ ンパ イ ラ フ ラ グは -mhard-float お よ び -mxl-float-sqrt に加
え、 -fno-math-errno を使用す る必要があ り ます。 こ れは、 errno 変数を ア ッ プデー ト す る こ と でエ
ラ ー コ ンデ ィ シ ョ ン を処理す る ための不必要な コー ド が コ ンパ イ ラ で生成 さ れない よ う にす る た
めです。
高速シ ン プ レ ッ ク ス リ ン ク (FSL)
MicroBlaze では、 入力ポー ト と 出力ポー ト を 1 つずつ持つ高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン
タ ーフ ェ イ ス を 16 個ま で使用で き ます。 FSL チ ャ ネルは、 ポ イ ン ト ツー ポ イ ン ト 接続 さ れた単一
方向デー タ ス ト リ ー ミ ン グ イ ン タ ーフ ェ イ ス です。FSL イ ン タ ーフ ェ イ ス の詳細は、ザ イ リ ン ク ス
EDK IP の資料のデー タ シー ト (DS449) 『Fast Simplex Link (FSL) Bus』 を参照 し て く だ さ い。
MicroBlaze の FSL イ ン タ ーフ ェ イ ス は、 32 ビ ッ ト 幅です。 別のビ ッ ト で、 送信/受信ワ ー ド が制御
信号であ る かデー タ であ る かが示 さ れます。 FSL ポー ト か ら 汎用レ ジ ス タ に情報を転送す る には、
MicroBlaze ISA の get 命令を使用 し ます。 汎用レ ジ ス タ か ら FSL ポー ト に情報を転送す る には、
put 命令を使用 し ます。 ど ち ら の命令に も 、ブ ロ ッ キ ン グ デー タ用、 ノ ンブ ロ ッ キ ン グ デー タ 用、ブ
ロ ッ キ ン グ コ ン ト ロール用、 ノ ンブ ロ ッ キ ン グ コ ン ト ロ ール用の 4 種類があ り ます。 get 命令お よ
び put 命令の詳細は、 第 4 章 「MicroBlaze 命令セ ッ ト アーキ テ ク チ ャ 」 を参照 し て く だ さ い。
82
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
高速シ ン プ レ ッ ク ス リ ン ク (FSL)
ハー ド ウ ェ ア ア ク セ ラ レ ー タ への FSL の使用
FSL は、プ ロ セ ッ サ パ イ プ ラ イ ンに対す る レ イ テ ン シが短い専用 イ ン タ ーフ ェ イ ス と し て使用で き
ます。そのため、プ ロ セ ッ サ実行ユニ ッ ト を カ ス タ ム ハー ド ウ ェ ア ア ク セ ラ レー タ を使用 し て拡張
す る 際に適 し ています。 図 1-23 に、 簡単な例を示 し ます。
コー ド例
FSLx
// Configure fx
カ ス タ ム ハー ド ウ ェ ア
ア ク セ ラ レー タ
cput Rc,RFSLx
MicroBlaze
// Store operands
put Ra, RFSLx // op 1
レジス タ
フ ァ イル
put Rb, RFSLx // op 2
Op1Reg
Op2Reg
ConfigReg
fx
// Load result
ResultReg
get Rt, RFSLx
FSLx
図 1-23 : ハー ド ウ ェ ア ア ク セ ラ レー タ フ ァ ン ク シ ョ ン
fx に FSL を使用 し た例
こ の方法は、 ISA を カ ス タ ム命令で拡張す る 方法に似てい ますが、 プ ロ セ ッ サ パ イ プ ラ イ ン全体の
速度がカ ス タ ム フ ァ ン ク シ ョ ンに依存 し ない と い う 利点があ り ます。 ま た、 こ の よ う に機能を拡張
す る 場合、 ソ フ ト ウ ェ ア ツール チ ェ ーンに追加の要件はあ り ません。
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
83
第 1 章 : MicroBlaze アーキテ ク チ ャ
デバ ッ グおよび ト レース
デバ ッ グの概要
MicroBlaze には、 XMD (Xilinx Microprocessor Debug ) の よ う な JTAG ベース の ソ フ ト ウ ェ ア デ
バ ッ グ ツール (バ ッ グ グ ラ ン ド デバ ッ グ モー ド (BDM) デバ ッ ガ と 呼ばれ る ) を サポー ト す る デ
バッグ
イ ン タ ーフ ェ イ ス が含ま れてい ます。 こ のデバ ッ グ
イ ン タ ーフ ェ イ スは、 ザ イ リ ン ク ス
FPGA の JTAG ポー ト と と の イ ン タ ーフ ェ イ ス に使用す る マ イ ク ロ プ ロ セ ッ サ デバ ッ グ モジ ュ ー
ル (MDM) コ アに接続 さ れます。 複数の MicroBlaze イ ン ス タ ン ス を 1 個の MDM に接続 し てマル
チプ ロ セ ッ サをデバ ッ グで き ます。 デバ ッ グの機能は、 次の と お り です。
•
ハー ド ウ ェ アのブ レー ク ポ イ ン ト 数お よ びウ ォ ッ チポ イ ン ト 数を設定可能、 ソ フ ト ウ ェ アのブ
レー ク ポ イ ン ト 数は無制限
•
外部プ ロ セ ッ サ制御に よ り デバ ッ グ ツールで MicroBlaze を停止、 リ セ ッ ト 、 シ ン グル ス テ ッ
プ可能
•
メ モ リ 、汎用レ ジ ス タ 、特殊用途レ ジ ス タ に対す る読み出 し /書 き 込み (EAR、EDR、ESR、BTR、
お よ び PVR0 ~ PVR11 は読み出 し のみ)
•
複数のプ ロ セ ッ サを サポー ト
•
命令キ ャ ッ シ ュ お よ びデー タ キ ャ ッ シ ュ への書 き 込み
ト レ ースの概要
MicroBlaze の ト レース イ ン タ ーフ ェ イ スは、パフ ォーマ ン ス を モニ タお よ び解析する ため、多数の
内部ス テー ト 信号を送信 し ます。 ト レース イ ン タ ーフ ェ イ スは、 ザ イ リ ン ク ス が開発 し た解析 コ ア
でのみ使用す る こ と をお勧め し ます。 こ の イ ン タ ーフ ェ イ ス は、 MicroBlaze の将来の リ リ ース では
サポー ト さ れない可能性があ り ます。
84
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ ン レ ン ス ガ イ ド
UG081 (v10.3)
第2章
MicroBlaze の信号イ ン タ ー フ ェ イ ス
こ の章では、 MicroBlaze™ に接続で き る信号 イ ン タ ーフ ェ イ ス の タ イ プについて説明 し ます。次の
セ ク シ ョ ン よ り 構成 さ れてい ます。
•
概要
•
MicroBlaze I/O の概要
•
プ ロ セ ッ サ ローカル バ ス (PLB) イ ン タ ーフ ェ イ ス
•
オンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB) イ ン ターフ ェ イ ス
•
ロ ーカル メ モ リ バ ス (LMB) イ ン タ ーフ ェ イ ス
•
高速シ ンプ レ ッ ク ス リ ン ク (FSL) イ ン タ ーフ ェ イ ス
•
ザ イ リ ン ク ス CacheLink (XCL) イ ン タ ーフ ェ イ ス
•
デバ ッ グ イ ン ターフ ェ イ ス
•
ト レース イ ン ターフ ェ イ ス
•
MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン
概要
MicroBlaze コ アは、 デー タ ア ク セ スお よ び命令ア ク セ ス に対 し 別々のバ ス イ ン タ ーフ ェ イ ス ユ
ニ ッ ト を持つハーバー ド アーキテ ク チ ャ 構造にな っ てい ます。 ロ ーカル メ モ リ バ ス (LMB)、 IBM
のプ ロ セ ッ サ ロ ーカル バ ス (PLB) ま たはオンチ ッ プ ペ リ フ ェ ラ ル バ ス (OPB)、お よ びザ イ リ ン ク
ス CacheLink (XCL) の 3 つの メ モ リ イ ン タ ーフ ェ イ ス がサポー ト さ れてい ます。 LMB では、オン
チ ッ プのデ ュ アル ポー ト ブ ロ ッ ク RAM に 1 ク ロ ッ ク サ イ ク ルでア ク セ ス で き ます。 PLB お よ び
OPB イ ン タ ーフ ェ イ ス は、オンチ ッ プ と オ フチ ッ プの両方のペ リ フ ェ ラ ルお よ び メ モ リ に接続で き
ます。 CacheLink イ ン タ ーフ ェ イ スは、専用の外部 メ モ リ コ ン ト ロー ラ 用です。 ま た MicroBlaze で
は、マ ス タ お よ びス レーブ FSL イ ン タ ーフ ェ イ ス を 1 つずつ持つ高速シ ンプ レ ッ ク ス リ ン ク (FSL)
ポー ト を 16 個ま で使用で き ます。
機能
MicroBlaze バ ス は、 次のバ ス イ ン タ ーフ ェ イ ス を使用 し て コ ン フ ィ ギ ュ レーシ ョ ンで き ます。
•
32 ビ ッ ト の PLB V4.6 イ ン タ ーフ ェ イ ス (IBM の 『128-Bit Processor Local Bus Architectural
Specifications, Version 4.6』 を参照)
•
32 ビ ッ ト の OPB V2.0 バ ス イ ン タ ーフ ェ イ ス (IBM の 『64-Bit On-Chip Peripheral Bus,
Architectural Specifications, Version 2.0』 を参照)
•
LMB ではブ ロ ッ ク RAM を効率 よ く 転送す る単純な同期プ ロ ト コ ルを提供
•
FSL では、 高速でアービ ト レーシ ョ ン を使用 し ない ス ト リ ー ミ ン グ通信 メ カ ニズ ム を提供
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
85
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
•
XCL では、 キ ャ ッ シ ュ と 外部 メ モ リ コ ン ト ロ ー ラ の間にアービ ト レーシ ョ ン を使用 し た高速
ス ト リ ー ミ ン グ イ ン ターフ ェ イ ス を提供
•
マ イ ク ロ プ ロ セ ッ サ デバ ッ グ モジ ュ ール (MDM) コ ア を使用 し たデバ ッ グ イ ン タ ーフ ェ イ ス
•
パフ ォーマ ン ス解析用の ト レース イ ン ターフ ェ イ ス
MicroBlaze I/O の概要
図 2-1 お よ び表 2-1 に示す コ ア イ ン タ ーフ ェ イ ス は、 次の よ う に定義 さ れてい ます。
DPLB :デー タ イ ン タ ーフ ェ イ ス、 プ ロ セ ッ サ ロ ーカル バ ス
DOPB : デー タ イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス
DLMB : デー タ イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ)
IPLB :命令 イ ン タ ーフ ェ イ ス、 プ ロ セ ッ サ ロ ーカル バ ス
IOPB : 命令 イ ン タ ーフ ェ イ ス、 オンチ ッ プ ペ リ フ ェ ラ ル バ ス
ILMB : 命令 イ ン タ ーフ ェ イ ス、 ロ ーカル メ モ リ バ ス (BRAM のみ)
MFSL 0..15 : FSL マ ス タ イ ン タ ーフ ェ イ ス
DWFSL 0..15 :FSL マ ス タ 直接接続 イ ン タ ーフ ェ イ ス
SFSL 0..15 : FSL ス レーブ イ ン タ ーフ ェ イ ス
DRFSL 0..15 : FSL ス レーブ直接接続 イ ン タ ーフ ェ イ ス
IXCL :命令側ザ イ リ ン ク ス CacheLink イ ン タ ーフ ェ イ ス (FSL マ ス タ / ス レーブ ペア )
DXCL :デー タ 側ザ イ リ ン ク ス CacheLink イ ン ターフ ェ イ ス (FSL マ ス タ / ス レーブ ペア )
コ ア : ク ロ ッ ク 、 リ セ ッ ト 、 デバ ッ グ、 ト レース用のその他の信号
命令側
バス イ ン タ ー フ ェ イ ス
デー タ 側
バス イ ン タ ー フ ェ イ ス
MMU (Memory Management Unit)
UTLB
ITLB
IXCL_S
デー タ キ ャ ッ シ ュ
命令キ ャ ッ シ ュ
IXCL_M
DTLB
ALU
プログラム
カウン タ
シフ ト
特殊用途
レジス タ
バレル シ フ ト
乗算器
IPLB
DXCL_M
DXCL_S
DPLB
除算器
IOPB
バス
IF
ILMB
FPU
バス
命令
バッ フ ァ
DOPB
IF
DLMB
命令
デコー ド
MFSL 0..15
または
レ ジ ス タ フ ァ イル
32 X 32b
DWFSL 0..15
SFSL 0..15
ま たは
オプ シ ョ ンの機能
DRFSL 0..15
図 2-1 : MicroBlaze コ アのブ ロ ッ ク 図
86
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
MicroBlaze I/O の概要
表 2-1 : MicroBlaze コ ア I/O のサマ リ
インター
フ ェ イス
I/O
DM_ABus[0:31]
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB ア ド レ ス バ ス
DM_BE[0:3]
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB バ イ ト イ ネーブル
DM_busLock
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB バ ス ロ ッ ク
DM_DBus[0:31]
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB 書 き込みデー タ バ ス
DM_request
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB バ ス要求
DM_RNW
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB 読み出 し 、 書 き込みは
なし
DM_select
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB セ レ ク ト
DM_seqAddr
DOPB
O
デー タ イ ン タ ーフ ェ イ ス OPB シーケ ン シ ャ ル
アド レス
DOPB_DBus[0:31]
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB 読み出 し デー タ バ ス
DOPB_errAck
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB エ ラ ー通知
DOPB_MGrant
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB バ ス許可
DOPB_retry
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB バ ス サ イ ク ル再試行
DOPB_timeout
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB タ イ ム ア ウ ト エ ラ ー
DOPB_xferAck
DOPB
I
デー タ イ ン タ ーフ ェ イ ス OPB 転送 ACK 信号
IM_ABus[0:31]
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB ア ド レ ス バ ス
IM_BE[0:3]
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB バ イ ト イ ネーブル
IM_busLock
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB バ ス ロ ッ ク
IM_DBus[0:31]
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB 書 き込みデー タ バ ス
(常に 0x00000000)
IM_request
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB バ ス要求
IM_RNW
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB 読み出 し 、 書 き込みはな
し (IM_select に接続)
IM_select
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB セ レ ク ト
IM_seqAddr
IOPB
O
命令 イ ン タ ーフ ェ イ ス OPB シーケ ン シ ャ ル ア ド レ ス
IOPB_DBus[0:31]
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB 読み出 し デー タ バ ス
IOPB_errAck
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB エ ラ ー通知
IOPB_MGrant
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB バ ス許可
IOPB_retry
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB バ ス サ イ ク ル再試行
IOPB_timeout
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB タ イ ム ア ウ ト エ ラ ー
IOPB_xferAck
IOPB
I
命令 イ ン タ ーフ ェ イ ス OPB 転送 ACK 信号
DPLB_M_ABort
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 中止バス要求 イ ン ジ
ケー タ
DPLB_M_ABus
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB ア ド レ ス バ ス
DPLB_M_UABus
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 上位ア ド レ ス バ ス
信号
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
説明
87
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き )
インター
フ ェ イス
I/O
DPLB_M_BE
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB バ イ ト イ ネーブル
DPLB_M_busLock
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB バス ロ ッ ク
DPLB_M_lockErr
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB ロ ッ ク エ ラ ー イ ン ジ
ケー タ
DPLB_M_MSize
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB マ ス タ デー タ バ ス
サイズ
DPLB_M_priority
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB バス要求優先順位
DPLB_M_rdBurst
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB バース ト 読み出 し 転送
イ ン ジ ケー タ
DPLB_M_request
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB バス 要求
DPLB_M_RNW
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 読み出 し 、 書き 込みは
なし
DPLB_M_size
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 転送サ イ ズ
DPLB_M_TAttribute
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 転送属性バス
DPLB_M_type
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 転送形式
DPLB_M_wrBurst
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB バース ト 書き 込み転送
イ ン ジ ケー タ
DPLB_M_wrDBus
DPLB
O
デー タ イ ン タ ーフ ェ イ ス PLB 書き 込みデー タ バ ス
DPLB_MBusy
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ ビ ジー イ ン
ジ ケー タ
DPLB_MRdErr
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ読み出 し
エ ラ ー イ ン ジ ケー タ
DPLB_MWrErr
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ書き 込み
エ ラ ー イ ン ジ ケー タ
DPLB_MIRQ
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ割 り 込み イ ン
ジ ケー タ
DPLB_MWrBTerm
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB 終端書 き込みバース ト
イ ン ジ ケー タ
DPLB_MWrDAck
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB 書き 込みデー タ 応答
DPLB_MAddrAck
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB ア ド レ ス応答
DPLB_MRdBTerm
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB 終端読み出 し バース ト
イ ン ジ ケー タ
DPLB_MRdDAck
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ 応答
DPLB_MRdDBus
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ バ ス
DPLB_MRdWdAddr
DPLB
I
データ イ ン タ ーフ ェ イ ス PLB 読み出し ワ ード ア ド
レス
DPLB_MRearbitrate
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB バス 再アービ ト レー
シ ョ ン イ ン ジ ケー タ
DPLB_MSSize
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB ス レーブ デー タ バ ス
サイズ
信号
88
japan.xilinx.com
説明
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
MicroBlaze I/O の概要
表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き )
インター
フ ェ イス
I/O
DPLB_MTimeout
DPLB
I
デー タ イ ン タ ーフ ェ イ ス PLB バス タ イ ム ア ウ ト
IPLB_M_ABort
IPLB
O
命令イ ン タ ーフ ェ イ ス PLB 中止バス 要求イ ン ジケ ータ
IPLB_M_ABus
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB ア ド レ ス バス
IPLB_M_UABus
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB 上位ア ド レ ス バス
IPLB_M_BE
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB バ イ ト イ ネーブル
IPLB_M_busLock
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB バ ス ロ ッ ク
IPLB_M_lockErr
IPLB
O
命令イ ン タ ーフ ェ イ ス PLB ロ ッ ク エラ ー イ ン ジ
ケ ータ
IPLB_M_MSize
IPLB
O
命令イ ン タ ーフ ェ イ ス PLB マス タ データ バス サイ ズ
IPLB_M_priority
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB バ ス要求優先順位
IPLB_M_rdBurst
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB バース ト 読み出 し 転送
イ ン ジ ケー タ
IPLB_M_request
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB バ ス要求
IPLB_M_RNW
IPLB
O
命令イ ン タ ーフ ェ イ ス PLB 読み出し 、 書き 込みはなし
IPLB_M_size
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB 転送サ イ ズ
IPLB_M_TAttribute
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB 転送属性バ ス
IPLB_M_type
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB 転送形式
IPLB_M_wrBurst
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB バース ト 書 き込み転送
イ ン ジ ケー タ
IPLB_M_wrDBus
IPLB
O
命令 イ ン タ ーフ ェ イ ス PLB 書 き込みデー タ バス
IPLB_MBusy
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB ス レーブ ビ ジー イ ン ジ
ケー タ
IPLB_MRdErr
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB ス レーブ読み出 し エ ラ ー
イ ン ジ ケー タ
IPLB_MWrErr
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB ス レーブ書 き込みエ ラ ー
イ ン ジ ケー タ
IPLB_MIRQ
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB ス レーブ割 り 込み イ ン ジ
ケー タ
IPLB_MWrBTerm
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB 終端書 き込みバース ト
イ ン ジ ケー タ
IPLB_MWrDAck
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB 書 き込みデー タ 応答
IPLB_MAddrAck
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB ア ド レ ス応答
IPLB_MRdBTerm
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB 終端読み出 し バース ト
イ ン ジ ケー タ
IPLB_MRdDAck
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ 応答
IPLB_MRdDBus
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB 読み出 し デー タ バス
IPLB_MRdWdAddr
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB 読み出 し ワ ー ド ア ド レ ス
IPLB_MRearbitrate
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB バ ス再アービ ト レーシ ョ
ン イ ン ジ ケー タ
信号
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
説明
89
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き )
インター
フ ェ イス
I/O
IPLB_MSSize
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB ス レーブ デー タ バ ス
サイズ
IPLB_MTimeout
IPLB
I
命令 イ ン タ ーフ ェ イ ス PLB バ ス タ イ ム ア ウ ト
Data_Addr[0:31]
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LMB ア ド レ ス バス
Byte_Enable[0:3]
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LMB バ イ ト イ ネーブル
Data_Write[0:31]
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LMB 書 き込みデー タ バス
D_AS
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LMB ア ド レ ス ス ト ロ ーブ
Read_Strobe
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LMB 読み出 し ス ト ロ ーブ
Write_Strobe
DLMB
O
デー タ イ ン タ ーフ ェ イ ス LMB 書 き込みス ト ロ ーブ
Data_Read[0:31]
DLMB
I
デー タ イ ン タ ーフ ェ イ ス LMB 読み出 し デー タ バス
DReady
DLMB
I
デー タ イ ン タ ーフ ェ イ ス LMB デー タ Ready
Instr_Addr[0:31]
ILMB
O
命令 イ ン タ ーフ ェ イ ス LMB ア ド レ ス バ ス
I_AS
ILMB
O
命令 イ ン タ ーフ ェ イ ス LMB ア ド レ ス ス ト ロ ーブ
IFetch
ILMB
O
命令 イ ン タ ーフ ェ イ ス LMB 命令フ ェ ッ チ
Instr[0:31]
ILMB
I
命令 イ ン タ ーフ ェ イ ス LMB 読み出 し デー タ バ ス
IReady
ILMB
I
命令 イ ン タ ーフ ェ イ ス LMB デー タ Ready
FSL0_M .. FSL15_M
MFSL
O
出力 FSL チ ャ ネルへのマ ス タ イ ン タ ーフ ェ イ ス
信号
ま たは
MFSL は FSL バス 接続に、 DWFSL は FSL ス レーブ
DWFSL
FSL0_S .. FSL15_S
SFSL
説明
と の直接接続に使用 さ れます。
I
ま たは
入力 FSL チ ャ ネルへの ス レーブ イ ン タ ーフ ェ イ ス
SFSL は FSL バ ス接続に、DRFSL は FSL マ ス タ と の
DRFSL
直接接続に使用 さ れます。
ICache_FSL_in...
IXCL_S
IO
命令側 CacheLink FSL ス レーブ イ ン タ ーフ ェ イ ス
ICache_FSL_out...
IXCL_M
IO
命令側 CacheLink FSL マ ス タ イ ン タ ーフ ェ イ ス
DCache_FSL_in...
DXCL_S
IO
デー タ 側 CacheLink FSL ス レーブ イ ン タ ーフ ェ イ ス
DCache_FSL_out...
DXCL_M
IO
デー タ 側 CacheLink FSL マ ス タ イ ン タ ーフ ェ イ ス
Interrupt
コア
I
割 り 込み
Reset1
コア
I
コ ア リ セ ッ ト 、 ア ク テ ィ ブ High。 1 Clk ク ロ ッ ク
サ イ ク ル以上保持す る必要あ り 。
Mb_Reset1
コア
I
コ ア リ セ ッ ト 、 ア ク テ ィ ブ High。 1 Clk ク ロ ッ ク
サ イ ク ル以上保持す る必要あ り 。
Clk
コア
I
ク ロ ッ ク2
Ext_BRK
コア
I
MDM か ら の BREAK 信号
Ext_NM_BRK
コア
I
MDM か ら のマ ス ク 不可の BREAK 信号
MB_Halted
コア
O
デバ ッ グ イ ン タ ーフ ェ イ ス を介 し た、 ま たは
Dbg_Stop の設定に よ る パ イ プ ラ イ ン停止
90
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
プ ロ セ ッ サ ロー カル バス (PLB) イ ン タ ー フ ェ イ ス
表 2-1 : MicroBlaze コ ア I/O のサマ リ (続き )
インター
フ ェ イス
I/O
説明
Dbg_Stop
コア
I
無条件でパ イ プ ラ イ ン を停止 し ます。 立ち上が り
エ ッ ジの検出パルスは最低 Clk ク ロ ッ ク サ イ ク ル間
保持する 必要あ り 。 C_DEBUG_ENABLED が 1 に
設定 さ れ る と き のみ影響を受け ます。
Dbg_...
コア
IO
Trace_...
コア
O
信号
MDM か ら のデバ ッ グ信号 (表 2-9 参照)
リ アル タ イ ム ハー ド ウ ェ ア解析用の ト レース信号
(表 2-10 参照)
1. Reset 信号お よ び Mb_Reset 信号の働 き は同 じ ですが、 Reset は主に OPB イ ン タ ー フ ェ イ ス で、
Mb_Reset は PLB イ ン タ ーフ ェ イ ス で使用 さ れ ま す。
2. MicroBlaze is のデザ イ ンは Clk 信号に同期 し ま す。 ただ し 、 ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク は Dbg_Clk
信号に同期 し ま す。 ハー ド ウ ェ ア デバ ッ グ ロ ジ ッ ク が使用 さ れない場合は Clk 信号には最小周波数の制限
はあ り ま せん。 使用 さ れ る 場合は こ れ ら の ク ロ ッ ク 領域間で信号が送信 さ れ ま すが、 Clk 信号の周波数を
Dbg_Clk の周波数 よ り も 高 く す る 必要があ り ます。
プ ロ セ ッ サ ロー カル バス (PLB) イ ン タ ー フ ェ イ ス
MicroBlaze の PLB イ ン フ ァ ーフ ェ イ スは、バ イ ト イ ネーブルが可能な 32 ビ ッ ト のマ ス タ と し て イ
ンプ リ メ ン ト さ れてい ます。詳細は、『IBM 128-Bit Processor Local Bus Architectural Specification
(v4.6)』 を参照 し て く だ さ い。
オン チ ッ プ ペ リ フ ェ ラル バス (OPB) イ ン タ ー フ ェ イ ス
MicroBlaze の OPB イ ン タ ーフ ェ イ ス は、 バイ ト イ ネーブルが可能な マス タ と し てイ ン プリ メ ン
ト さ れて いま す。 詳細は、『 OPB Usage in Xilinx FPGA』 を 参照し てく ださ い。
ロー カル メ モ リ バス (LMB) イ ン タ ー フ ェ イ ス
LMB は、主にオンチ ッ プ ブ ロ ッ ク RAM にア ク セ スする ために使用する 同期バス です。 こ のバ ス で
は、最小数の制御信号 と 単純なプ ロ ト コ ルを 1 個使用 し て、 ロ ーカル ブ ロ ッ ク RAM に 1 ク ロ ッ ク
サ イ ク ルでア ク セ ス で き ます。 LMB の信号 と その定義を次の表に示 し ます。 LMB 信号はすべてア
ク テ ィ ブ High です。
LMB 信号のイ ン タ ー フ ェ イ ス
表 2-2 : LMB バスの信号
デー タ
イ ン ターフ ェ イス
命令
イン ターフ ェ イス
タ イプ
Addr[0:31]
Data_Addr[0:31]
Instr_Addr[0:31]
O
ア ド レ ス バス
Byte_Enable[0:3]
Byte_Enable[0:3]
未使用
O
バ イ ト イ ネーブル
Data_Write[0:31]
Data_Write[0:31]
未使用
O
書き 込みデー タ バ ス
AS
D_AS
I_AS
O
ア ド レ ス ス ト ロ ーブ
Read_Strobe
Read_Strobe
IFetch
O
読み出 し 中
Write_Strobe
Write_Strobe
未使用
O
書き 込み中
信号
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
説明
91
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-2 : LMB バスの信号
デー タ
イ ン ターフ ェ イス
命令
イン ターフ ェ イス
タ イプ
Data_Read[0:31]
Data_Read[0:31]
Instr[0:31]
I
読み出 し デー タ バ ス
Ready
DReady
IReady
I
次の転送の準備完了
Clk
Clk
Clk
I
バス ク ロ ッ ク
信号
説明
Addr[0:31]
ア ド レ ス バ ス は コ アの出力で、 現在の転送に よ り ア ク セ ス さ れてい る メ モ リ ア ド レ ス を示 し ます。
こ のバ スは AS が High の と き のみ有効です。複数の ク ロ ッ ク サ イ ク ルが必要 と な る ア ク セ ス では、
Addr[0:31] はその転送の最初の ク ロ ッ ク サ イ ク ルでのみ有効です。
Byte_Enable[0:3]
バ イ ト イ ネーブル信号は コ アの出力で、 有効なデー タ を含むデー タ バ ス のバ イ ト レーン を示 し ま
す。 Byte_Enable[0:3] は、 AS が High の と き のみ有効です。複数の ク ロ ッ ク サ イ ク ルが必要 と な る
ア ク セ ス では、Byte_Enable[0:3] はその転送の最初の ク ロ ッ ク サ イ ク ルでのみ有効です。 次の表に、
Byte_Enable[0:3] の有効な値を示 し ます。
表 2-3 : Byte_Enable[0:3] での有効値
使用 さ れるバイ ト レーン
Byte_Enable[0:3]
Data[0:7]
Data[8:15]
Data[16:23]
Data[24:31]
0000
0001
x
0010
x
0100
1000
x
x
0011
1100
x
x
1111
x
x
x
x
x
x
Data_Write[0:31]
書 き 込みデー タ バ ス は コ アの出力で、 メ モ リ に書 き込まれ るデー タ が含まれています。 こ のバ スは
AS が High の と き にのみ有効です。 Byte_Enable[0:3] で指定 さ れ る バ イ ト レーンにのみ有効な
デー タ が含まれてい ます。
AS
ア ド レ ス ス ト ローブは コ アの出力で、転送の開始を示 し 、ア ド レ ス バ スお よ びバ イ ト イ ネーブルを
有効に し ます。 こ の ス ト ロ ーブは、転送の最初の ク ロ ッ ク サ イ ク ルでのみ High にな り 、その後次の
転送の開始ま で Low にな り ます。
Read_Strobe
読み出 し ス ト ロ ーブは コ アの出力で、読み出 し 転送が進行中であ る こ と を示 し ます。 こ の信号は、転
送の最初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク ル
92
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ロー カル メ モ リ バス (LMB) イ ン タ ー フ ェ イ ス
ま で High の ま ま にな る場合があ り ます。 次の ク ロ ッ ク サ イ ク ルで新た な読み出 し 転送が直接開始
さ れ る 場合は、 Read_Strobe は High の ま ま にな り ます。
Write_Strobe
書 き 込みス ト ロ ーブは コ アの出力で、書 き込み転送が進行中であ る こ と を示 し ます。 こ の信号は、転
送の最初の ク ロ ッ ク サ イ ク ルで High にな り 、 Ready 信号が High にな っ た後の ク ロ ッ ク サ イ ク ル
ま で High の ま ま にな る場合があ り ます。 次の ク ロ ッ ク サ イ ク ルで新た な書 き込み転送が直接開始
さ れ る 場合は、 Write_Strobe は High の ま ま にな り ます。
Data_Read[0:31]
読み出 し バ ス は コ アへの入力で、 メ モ リ か ら 読み出 さ れたデー タ を含みます。 Data_Read[0:31] は、
Ready 信号が High の と き の ク ロ ッ ク の立ち上が り エ ッ ジで有効です。
Ready
Ready 信号はコ アへの入力で、現在の転送が完了し 、次のク ロ ッ ク サイ ク ルで次の転送が開始可能で
あ る こ と を 示し ま す。 こ の信号は、 ク ロ ッ ク の立ち上がり エッ ジでサン プリ ン グ さ れま す。 読み出し
では、こ の信号は Data_Read[0:31] バス が有効であ る こ と を 示し 、書き 込みでは Data_Write[0:31] バ
ス がロ ーカ ル メ モリ に書き 込ま れたこ と を 示し ま す。
Clk
LMB での動作は、 すべて MicroBlaze コ アの ク ロ ッ ク に同期 し てい ます。
LMB ト ラ ンザ ク シ ョ ン
次に LMB バ ス の動作の例を示 し ます。
一般的な書き込み動作
Clk
Addr
A0
Byte_Enable
1111
Data_Write
D0
AS
Read_Strobe
Write_Strobe
Data_Read
Ready
図 2-2 : LMB での一般的な書き込み動作
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
93
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
一般的な読み出 し 動作
Clk
Addr
A0
Byte_Enable
1111
Data_Write
AS
Read_Strobe
Write_Strobe
Data_Read
D0
Ready
図 2-3 : LMB の一般的な読み出 し 動作
連続書き込み動作
Clk
Addr
A0
A1
A2
Byte_Enable
BE0
BE1
BE2
Data_Write
AS
Read_Strobe
Write_Strobe
Data_Read
Ready
図 2-4 : LMB での連続書き込み動作
1 サイ ク ルの連続読み出 し 動作
Clk
Addr
A0
A1
A2
Byte_Enable
BE0
BE1
BE2
D0
D1
Data_Write
AS
Read_Strobe
Write_Strobe
Data_Read
D2
Ready
図 2-5 : LMB での 1 サイ ク ルの連続読み出 し 動作
94
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ロー カル メ モ リ バス (LMB) イ ン タ ー フ ェ イ ス
読み出 し /書き込み混合の連続動作
Clk
Addr
A0
A1
Byte_Enable
BE0
BE1
Data_Write
D0
AS
Read_Strobe
Write_Strobe
Data_Read
D1
Ready
図 2-6 : 読み出 し /書き込み混合の連続動作
デー タ の読み出 し および書き込み操作
MicroBlaze のデー タ 側のバ ス イ ン タ ーフ ェ イ ス では、 次の転送を サポー ト す る のに必要 と な る 読
み出 し 操作お よ び書 き 込み操作が実行 さ れます。
•
ワ ー ド デバ イ スへのバ イ ト 、 ハーフ ワー ド 、 ワー ド 転送
•
ハーフ ワ ー ド デバ イ スへのバ イ ト 、 ハーフ ワー ド 転送
•
バ イ ト デバ イ スへのバ イ ト 転送
MicroBlaze では、 指定デバ イ ス の転送サ イ ズ を超え る転送はサポー ト さ れていません。 こ れ ら の転
送では、 MicroBlaze バ ス イ ン タ ーフ ェ イ ス でサポー ト さ れていないダ イ ナ ミ ッ ク バ ス サ イ ジ ン グ
お よ び変換サ イ ク ルが必要 と な り ます。 読み出 し サ イ ク ルに対す るデー タ 操作を表 2-4 に、 書 き 込
みサ イ ク ルに対す る デー タ 操作を表 2-5 に示 し ます。
表 2-4 : 読み出 し デー タ の操作 ( レ ジ ス タ rD への読み込み)
レ ジ ス タ rD デー タ
[30:31]
Byte_Enable
[0:3]
転送サイ ズ
11
0001
バイ ト
Byte3
10
0010
バイ ト
Byte2
01
0100
バイ ト
Byte1
00
1000
バイ ト
Byte0
10
0011
ハーフ ワー ド
Byte2
Byte3
00
1100
ハーフ ワー ド
Byte0
Byte1
00
1111
ワー ド
Byte2
Byte3
ア ド レス
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
rD[0:7]
Byte0
rD[8:15]
Byte1
rD[16:23]
rD[24:31]
95
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-5 : 書き込みデー タ の操作 ( レ ジ ス タ rD から の格納)
書き込みデー タ バスのバイ ト
ア ド レ ス Byte_Enable
転送サイ ズ
[30:31]
[0:3]
11
0001
バイ ト
10
0010
バイ ト
01
0100
バイ ト
00
1000
バイ ト
10
0011
ハーフ ワ ー ド
00
1100
ハーフ ワ ー ド
00
1111
ワー ド
Byte0
Byte1
Byte2
Byte3
rD[24:31]
rD[24:31]
rD[24:31]
rD[24:31]
rD[16:23]
rD[24:31]
rD[0:7]
rD[8:15]
rD[16:23]
rD[24:31]
rD[16:23]
rD[24:31]
メ モ : その他の OPB マ ス タ では、MicroBlaze で許容 さ れ る バ イ ト レーン配置での要件 よ り も 制限
が多い可能性があ り ます。 OPB の ス レーブ デバ イ ス は、 通常最上位のバ イ ト レーンに接続 さ れて
い る バ イ ト デバ イ スお よ び最上位のハーフ ワ ー ド レーンに接続 さ れてい る ハーフ ワ ー ド デバ イ ス
に、 左揃えで接続 さ れてい ます。 MicroBlaze の操作 ロ ジ ッ ク では、 こ の接続方法が完全にサポー ト
さ れてい ます。
高速シ ン プ レ ッ ク ス リ ン ク (FSL) イ ン タ ー フ ェ イ ス
FSL バ ス では、出力 FIFO と 入力 FIFO 間のポ イ ン ト ツー ポ イ ン ト 通信が可能です。 ジ ェ ネ リ ッ ク
FSL プ ロ ト コ ルの詳細は、 ザ イ リ ン ク ス EDK IP の資料の デー タ シー ト (DS449) 『Fast Simplex
Link (FSL) Bus』 を参照 し て く だ さ い。
マス タ FSL 信号のイ ン タ ー フ ェ イ ス
MicroBlaze では、 16 個ま でのマ ス タ FSL イ ン タ ーフ ェ イ ス を使用で き ます。 マ ス タ 信号を表 2-6
に示 し ます。
表 2-6 : マス タ FSL 信号
信号名
96
説明
VHDL の型
方向
FSLn_M_Clk
クロック
std_logic
入力
FSLn_M_Write
デー タ が出力 FSL に書 き込まれてい る
こ と を示す ラ イ ト イ ネーブル信号
std_logic
出力
FSLn_M_Data
出力 FSL に書き 込まれ る デー タ 値
std_logic_vector
出力
FSLn_M_Control
出力 FSL に書き 込まれ る 制御ビ ッ ト 値
std_logic
出力
FSLn_M_Full
出力 FIFO が フルであ る こ と を示すフル
ビッ ト
std_logic
入力
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
高速シ ン プ レ ッ ク ス リ ン ク (FSL) イ ン タ ー フ ェ イ ス
ス レ ーブ FSL 信号のイ ン タ ー フ ェ イ ス
MicroBlaze では、16 個ま での ス レーブ FSL イ ン タ ーフ ェ イ ス を使用で き ます。 ス レーブ FSL イ ン
タ ーフ ェ イ ス信号を表 2-7 に示 し ます。
表 2-7 : ス レーブ FSL 信号
信号名
説明
VHDL の型
方向
FSLn_S_Clk
クロック
std_logic
入力
FSLn_S_Read
デー タ が入力 FSL か ら 読み出
さ れてい る こ と を示す読み出 し
ACK 信号
std_logic
出力
FSLn_S_Data
入力 FSL の一番上で現在読み
出 し 可能なデー タ 値
std_logic_vector
入力
FSLn_S_Control
入力 FSL の一番上で現在読み
出 し 可能な制御ビ ッ ト 値
std_logic
入力
FSLn_S_Exists
入力 FSL にデー タ が存在す る
こ と を示すフ ラ グ
std_logic
入力
FSL ト ラ ンザ ク シ ョ ン
FSL バス書き込み動作
MicroBlaze に よ る FSL バスへの書き 込みは、 put 命令ま たは putd 命令の 1 つを使用 し て実行 さ れ
ます。 書 き 込みでは、 レ ジ ス タ の内容が出力 FSL に転送 さ れます。 こ の転送は通常、 FSL FIFO が
フルにな ら なければ、 ブ ロ ッ キ ン グ モー ド の書 き込み (put お よ び cput 命令) では 1 ク ロ ッ ク サ イ
ク ルで完了 し ます。 FSL FIFO が フルにな る と 、FSL フル フ ラ グが Low にな る ま でプ ロ セ ッ サが ス
ト ール し ます。 接頭辞が n の ノ ンブ ロ ッ キ ン グ命令では、 FSL が フルで も 、 転送は 1 ク ロ ッ ク サ イ
ク ルで完了 し ます。 FSL が フルの場合、書 き 込みは実行 さ れず、MSR のキ ャ リ ー ビ ッ ト が設定 さ れ
ます。
FSL バス読み出 し 動作
MicroBlaze に よ る FSL バス か ら の読み出 し は、 get 命令ま たは getd 命令の 1 つを使用 し て実行 さ
れます。 読み出 し が実行 さ れ る と 、 入力 FSL の内容が汎用レ ジ ス タ に転送 さ れます。 こ の転送は通
常、 FSL FIFO にデー タ が存在すれば、 ブ ロ ッ キ ン グ モー ド の読み出 し では 2 ク ロ ッ ク サ イ ク ルで
完了 し ます。 FSL FIFO が空にな る と 、FSL にデー タ が存在す る こ と を示すフ ラ グが High にな る ま
でプ ロ セ ッ サが こ の命令で ス ト ール し ます。 接頭辞が n の ノ ンブ ロ ッ キ ン グ モー ド 命令では、 FSL
が空であ る か ど う かにかかわ ら ず、 転送は 2 ク ロ ッ ク サ イ ク ルで完了 し ます。 FSL が空の場合、
デー タ 転送は実行 さ れず、 MSR のキ ャ リ ー ビ ッ ト が設定 さ れます。
直接 FSL 接続
直接 FSL 接続を使用す る と 、 FSL バス を使用する 必要がな く な り ます。 直接接続には FSL バ ス
FIFO が含まれないため、 2 つの接続 さ れた IP コ ア間にバ ッ フ ァ を必要 と し ない場合に有用です。
バ ッ フ ァ を使用 し なければ、通信レ イ テ ン シお よ び必要な イ ンプ リ メ ン テーシ ョ ン リ ソ ース が削減
さ れます。
各 MicroBlaze FSL イ ン タ ーフ ェ イ ス で、直接 FSL 接続ま たは FSL バス のいずれかを 使用でき ま す。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
97
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
MicroBlaze DWFSL イ ン タ ーフ ェ イ ス は直接 FSL 接続上の イ ニシエー タ で、 DWFSL タ ーゲ ッ ト
にのみ接続で き ます。 DWFSL イ ニ シエー タ と タ ーゲ ッ ト の信号は同名で、表 2-6 に示 さ れ る MFSL
信号 と 同一です。 MicroBlaze では DWFSL イ ン タ ーフ ェ イ ス を使用 し て、put ま たは putd 命令のい
ずれかでデー タ を タ ーゲ ッ ト に書 き込みます。
MicroBlaze DRFSL イ ン ターフ ェ イ ス は直接 FSL 接続上の タ ーゲ ッ ト で、 DRFSL イ ニ シエー タ に
のみ接続で き ます。 DRFSL イ ニシエー タ と タ ーゲ ッ ト の信号は同名で、表 2-7 に示 さ れ る SFSL 信
号 と 同一です。 MicroBlaze では DRFSL イ ン タ ーフ ェ イ ス を使用 し て、 get 命令ま たは getd 命令の
いずれかでデー タ を イ ニ シエー タ か ら 読み出 し ます。
XCL (ザ イ リ ン ク ス CacheLink) イ ン タ ーフ ェ イ スは直接 FSL 接続を使用 し て イ ンプ リ メ ン ト さ れ
ます。
98
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス
ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス
ザ イ リ ン ク ス CacheLink (XCL) は、 外部 メ モ リ にア ク セ スす る ためのハ イ パフ ォーマン ス ソ
リ ュ ーシ ョ ンです。 CacheLink イ ン タ ーフ ェ イ ス は、 MPMC な ど の統合 FSL バ ッ フ ァ を使用 し て
メ モ リ コ ン ト ロー ラ に直接接続す る よ う に設計 さ れてい ます。 こ の方法を使用す る と イ ン ス タ ン シ
エーシ ョ ン数 も 最少にな り 、 レ イ テ ン シが最短にな り ます (図 2-7 を参照)。
回路図
MHS コ ー ド 例
BEGIN microblaze
...
BUS_INTERFACE IXCL = myIXCL
...
END
FSL
FSL
メモリ
コ ン ト ロー ラ
BEGIN mch_opb_sdram
...
BUS_INTERFACE MCH0 = myIXCL
...
END
MicroBlaze
図 2-7 : 統合 FSL バ ッ フ ァ を使用 し た CacheLink の接続 (命令キ ャ ッ シ ュのみを使用)
こ のイ ン タ ーフ ェ イ ス は、 キャ ッ シュ を イ ネーブルにし たと き のみ使用可能です。 命令側ま たはデー
タ 側のいずれか一方のみに CacheLink のキャ ッ シュ を 使用する こ と も でき ま す。
メ モ リ ロ ケーシ ョ ンのア ク セ ス方法は、 命令キ ャ ッ シ ュ ではパ ラ メ ー タ C_ICACHE_ALWAYS_
USED、 データ キャ ッ シュ ではパラ メ ータ C_DCACHE_ALWAYS_USED によ っ て決ま り ま す。 パ
ラ メ ータ が 1 に設定さ れている 場合は、キャ ッ シュ 可能な範囲内のメ モリ は常に CacheLink を 介し て
アク セス さ れ、0 に設定さ れている 場合は、ソ フ ト ウ ェ アでオフ に設定さ れている 場合 (MSR[DCE]=0
ま たは MSR[ICE]=0) に、 PLB ま たは OPB を使用 し てア ク セ ス さ れます。
キ ャ ッ シ ュ 可能な範囲外の メ モ リ ロ ケーシ ョ ンは、PLB、OPB ま たは LMB を使用 し てア ク セ ス さ
れます。
CacheLink キ ャ ッ シ ュ コ ン ト ロ ー ラ では、選択 さ れてい る プ ロ ト コ ルに よ り 、 ク リ テ ィ カル ワ ー ド
フ ァ ース ト ま たは リ ニ ア フ ェ ッ チを使用 し て、 4 ま たは 8 キ ャ ッ シ ュ ラ イ ンが処理 さ れます。 ま
た、 キ ャ ッ シ ュ へのア ク セ ス に PLB ま たは OPB バ ス を使用 し ないため、 キ ャ ッ シ ュ 以外の メ モ リ
ア ク セ ス の競合が減少 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
99
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
CacheLink 信号のイ ン タ ー フ ェ イ ス
MicroBlaze の CacheLink 信号を表 2-8 に示 し ます。
表 2-8 : MicroBlaze の CacheLink 信号
信号名
100
説明
VHDL の型
方向
ICACHE_FSL_IN_Clk
命令側戻 り 読み出 し デー タ FSL
への ク ロ ッ ク 出力
std_logic
出力
ICACHE_FSL_IN_Read
命令側戻 り 読み出 し デー タ FSL
への読み出 し 信号
std_logic
出力
ICACHE_FSL_IN_Data
命令側戻 り 読み出 し デー タ FSL
か ら の読み出 し デー タ
std_logic_vector
(0 ~ 31)
入力
ICACHE_FSL_IN_Control
命令側戻 り 読み出 し デー タ FSL
か ら の FSL 制御ビ ッ ト (将来の
使用に予約)
std_logic
入力
ICACHE_FSL_IN_Exists
命令側戻 り FSL に読み出 し
デー タ が存在
std_logic
入力
ICACHE_FSL_OUT_Clk
命令側読み出 し ア ク セ ス FSL へ
の ク ロ ッ ク 出力
std_logic
出力
ICACHE_FSL_OUT_Write
命令側読み出 し ア ク セ ス FSL に
新規キ ャ ッ シ ュ ミ ス ア ク セ ス
要求を書 き込み
std_logic
出力
ICACHE_FSL_OUT_Data
命令側読み出 し ア ク セ ス FSL の
新規キ ャ ッ シ ュ ミ ス ア ク セ ス
(ア ド レ ス )
std_logic_vector
(0 ~ 31)
出力
ICACHE_FSL_OUT_Control
命令側読み出 し ア ク セ ス FSL へ
の FSL 制御ビ ッ ト (将来の使用
に予約)
std_logic
出力
ICACHE_FSL_OUT_Full
命令側読み出 し ア ク セ ス 用の
FSL ア ク セ ス バ ッ フ ァ はフル
std_logic
入力
DCACHE_FSL_IN_Clk
デー タ 側戻 り 読み出 し デー タ
FSL への ク ロ ッ ク 出力
std_logic
出力
DCACHE_FSL_IN_Read
デー タ 側戻 り 読み出 し デー タ
FSL への読み出 し 信号
std_logic
出力
DCACHE_FSL_IN_Data
デー タ 側戻 り 読み出 し デー タ
FSL か ら の読み出 し デー タ
std_logic_vector
(0 ~ 31)
入力
DCACHE_FSL_IN_Control
デー タ 側戻 り 読み出 し デー タ
FSL か ら の FSL 制御ビ ッ ト
std_logic
入力
DCACHE_FSL_IN_Exists
デー タ 側戻 り FSL に読み出 し
デー タ が存在
std_logic
入力
DCACHE_FSL_OUT_Clk
デー タ 側読み出 し ア ク セ ス FSL
への ク ロ ッ ク 出力
std_logic
出力
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス
表 2-8 : MicroBlaze の CacheLink 信号 (続き )
信号名
説明
VHDL の型
方向
DCACHE_FSL_OUT_Write
デー タ 側読み出 し ア ク セ ス FSL
に新規キ ャ ッ シ ュ ミ ス ア ク セ ス
要求を書 き込み
std_logic
出力
DCACHE_FSL_OUT_Data
デー タ 側読み出 し ア ク セ ス FSL
へのキ ャ ッ シ ュ ミ ス ア ク セ ス
(読み出 し ア ド レ ス ま たは書 き
込みア ド レ ス + 書 き込みデー タ
+ バ イ ト ラ イ ト イ ネーブル +
バース ト 書 き込みエン コー ド )
std_logic_vector
(0 ~ 31)
出力
DCACHE_FSL_OUT_Control
デー タ 側読み出 し ア ク セ ス FSL
への FSL 制御ビ ッ ト 。 読み出 し /
書 き込み、バ イ ト イ ネーブル、お
よ びバー ス ト 書 き 込みエ ン コ ー
ド 用のア ド レ ス ビ ッ ト [30 ~
std_logic
出力
std_logic
入力
31]
DCACHE_FSL_OUT_Full
デー タ 側読み出 し ア ク セ ス 用の
FSL ア ク セ ス バ ッ フ ァ はフル
CacheLink ト ラ ンザ ク シ ョ ン
すべての CacheLink ア ク セ ス は、 FSL FIFO ベース の ト ラ ンザ ク シ ョ ン プ ロ ト コ ルに従い ます。
•
ア ク セ ス情報は、 FSL デー タお よび制御信号 (DCACHE_FSL_OUT_Data、 DCACHE_FSL_
OUT_Control、 ICACHE_FSL_IN_Data、 お よ び ICACHE_FSL_IN_Control な ど ) を介 し てエ
ン コ ー ド さ れます。
•
情報は、ラ イ ト イ ネーブル信号 (DCACHE_FSL_OUT_Write な ど ) が High にな る と 送信ま た
は保存 さ れます。
•
書 き 込みは、フル信号が非ア ク テ ィ ブ (DCACHE_FSL_OUT_Full = 0 な ど ) の場合にのみ可能
です。 こ の フル信号は、 命令キ ャ ッ シ ュ コ ン ト ロー ラ では使用 さ れません。
•
ICACHE_FSL_IN_Read お よ び DCACHE_FSL_IN_Read の使用はど の イ ン タ ーフ ェ イ ス プ
ロ ト コ ルが選択 さ れてい る かに よ っ て決ま り ます。
♦
♦
IXCL およ び DXCL プロ ト コ ルが選択さ れている 場合、 読み出し 信号を High にする と 情報
が受信さ れ ( 読み込ま れ ) ま す。 送信側が新し いデータ がある こ と を 通知する と き 以外、 信
号は Low です。
IXCL2 およ び DXCL2 プロ ト コ ルが選択さ れている 場合、 読み出し 信号が Low になる と 、
受信側が新し いデータ を 受信でき ないこ と を 示し ま す。 読み出し 信号が High の場合にの
み、 新し いデータ は読み込ま れ、 送信側はデータ が存在する こ と を 通知し ま す。
•
読み出し は、新し いデータ が存在する (ICACHE_FSL_IN_Exists = 1 など ) 場合にのみ可能です。
ジ ェ ネ リ ッ ク FSL プ ロ ト コ ルの詳細は、 ザ イ リ ン ク ス EDK IP の資料の デー タ シー ト (DS449)
『Fast Simplex Link (FSL) Bus』 を参照 し て く だ さ い。
CacheLink では、 キ ャ ッ シ ュ コ ン ト ロ ール 1 つに対 し て受信 ( ス レーブ) FSL と 送信 ( マ ス タ ) FSL
が 1 つずつ使用 さ れます。 送信 FSL は ア ク セ ス要求を送信す る のに使用 さ れ、 受信 FSL は要求 さ
れた キ ャ ッ シ ュ ラ イ ン を受信す る のに使用 さ れます。 ま た、 CacheLink では、 ト ラ ンザ ク シ ョ ン情
報に対 し て、 FSL デー タお よび制御信号を介 し た特定のエン コー ド 手法が使用 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
101
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
CacheLink プ ロ ト コ ルでの読み出 し に使用 さ れ る キ ャ ッ シ ュ ラ イ ンの長 さ は 4 ま たは 8 ワ ー ド で
す。 各キ ャ ッ シ ュ ラ イ ンは ク リ テ ィ カル ワ ー ド フ ァ ース ト で フ ェ ッ チ さ れ る か、 ま たは リ ニ アに
フ ェ ッ チ さ れますが、 こ れは、 ど の イ ン タ ーフ ェ イ ス プ ロ ト コ ルが選択 さ れてい る かに よ り ます。
•
ク リ テ ィ カル ワー ド フ ァ ース ト は、 IXCL お よ び DXCL プ ロ ト コ ルで使用 さ れ、
C_ICACHE_INTERFACE = 0 お よび C_DCACHE_INTERFACE = 0 と それぞれ指定 さ れて
い る 場合に選択 さ れます。 各キ ャ ッ シ ュ ラ イ ンは、 ク リ テ ィ カル ワ ー ド か ら 始ま り ます。 つ
ま り 、 ア ド レ ス 0x348 へのア ク セ ス が 4 ワー ド キ ャ ッ シ ュ ラ イ ンの ミ ス であ っ た場合、 戻 り
キ ャ ッ シ ュ ラ イ ンのア ド レ ス シーケ ン スは、 0x348、 0x34c、 0x340、 0x344 と な り ます。
キ ャ ッ シ ュ コ ン ト ロー ラ に よ り 、 最初の ワー ド が実行ユニ ッ ト に送信 さ れ、 キ ャ ッ シ ュ メ モ
リ に も 保存 さ れます。 こ れに よ り 、 最初の ワ ー ド が戻 る と 同時に実行が再開 し ます。 その後、
キ ャ ッ シ ュ ラ イ ンに残 り の 3 つま たは 7 つの ワー ド が保存 さ れます。
•
リ ニ ア フ ェ ッ チは、 IXCL2 お よび DXCL2 プ ロ ト コ ルで使用 さ れ、
C_ICACHE_INTERFACE = 1 お よび C_DCACHE_INTERFACE = 1 と それぞれ指定 さ れて
い る 場合に選択 さ れます。 CacheLink のア ド レ ス出力は、 キ ャ ッ シ ュ ラ イ ン サ イ ズに調整 さ
れます。 つま り 、 ア ド レ ス 0x348 へのア ク セ スは、 4 ワ ー ド のキ ャ ッ シ ュ ラ イ ンで ミ ス と な
り 、 CacheLink のア ド レ ス出力が 0x340 と な り ます。 キ ャ ッ シ ュ コ ン ト ロ ー ラ は、 キ ャ ッ
シ ュ メ モ リ にデー タ を保存 し 、 要求 さ れた ワー ド を実行ユニ ッ ト に随時転送 し ます。
パ ラ メ ー タ C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る場合、 書き 込み操作は、 バー
ス ト 書 き 込みお よ びシ ン グル ワー ド を使用 し て、 キ ャ ッ シ ュ ラ イ ン全体を保存す る こ と がで き ま
す。各キ ャ ッ シ ュ ラ イ ンは常に リ ニアに保存 さ れ、CacheLink のア ド レ ス出力はキ ャ ッ シ ュ ラ イ ン
サ イ ズに調整 さ れます。パ ラ メ ー タ C_DCACHE_USE_WRITEBACK が 0 に設定 さ れてい る場合、
CacheLink のすべての書 き込み操作はシ ン グル ワ ー ド に よ る も のです。ラ イ ト バ ッ ク が使用 さ れて
い る 場合、 バース ト 書 き込みは DXCL2 プ ロ ト コ ルでのみ使用可能なので、 C_DCACHE
_INTERFACE は 1 に設定す る必要があ り ます。
命令キ ャ ッ シ ュの読み出 し ミ ス
読み出 し ミ ス が発生す る と 、 キ ャ ッ シ ュ コ ン ト ロー ラ は次のシーケ ン ス を実行 し ます。
1. 制御ビ ッ ト を Low (ICACHE_FSL_OUT_Control = 0) に設定 し て読み出 し ア ク セ ス を示 し 、
ワ ー ド を揃えた (1) ま たはキ ャ ッ シ ュ ラ イ ンでそ ろ え た ミ ス ア ド レ ス を ICACHE_FSL_OUT
_Data に書 き 込みます。
2. デー タ が存在す る こ と を示す ICACHE_FSL_IN_Exists が High にな る ま で待機 し ます。
メ モ : ICACHE_FSL_IN_Exists が High にな る 前に、 少な く と も 1 ク ロ ッ ク サ イ ク ル間 wait 状態
であ る 必要があ り ます。
IXCL プ ロ ト コ ル ( ク リ テ ィ カル ワー ド フ ァ ース ト )
3. ICACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。
4. ク リ テ ィ カル ワー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。
5. キ ャ ッ シ ュ ラ イ ンの残 り の 3 ワ ー ド に対 し 、 手順 3 ~ 4 を繰 り 返 し ます。
IXCL2 プ ロ ト コ ル ( リ ニ ア フ ェ ッ チ)
3. ICACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。
4. 関連ワ ー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。
5. ICACHE_FSL_IN_Data か ら の残 り の ワー ド を キ ャ ッ シ ュ に保存 し ます。
1. バ イ ト お よ びハーフ ワ ー ド の読み出 し ミ ス では、 完全な ワ ー ド が返 さ れ、 キ ャ ッ シ ュ コ ン ト ロ ー ラ に よ り 実行ユ
ニ ッ ト に正 し いバ イ ト が送信 さ れ ます。
102
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ザイ リ ン ク ス CacheLink (XCL) イ ン タ ー フ ェ イ ス
デー タ キ ャ ッ シ ュの読み出 し ミ ス
1. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を ス ト ール し ます。
2. 制御ビ ッ ト を Low (DCACHE_FSL_OUT_Control = 0) に設定 し て読み出 し ア ク セ ス を示 し 、
ワ ー ド に揃えた (1) ま たはキ ャ ッ シ ュ ラ イ ンで揃え た ミ ス ア ド レ ス を DCACHE_FSL_OUT
_Data に書 き 込みます。
3. デー タ が存在す る こ と を示す DCACHE_FSL_IN_Exists が High にな る ま で待機 し ます。
メ モ : DCACHE_FSL_IN_Exists が High にな る 前に、少な く と も 1 ク ロ ッ ク サ イ ク ル間 wait 状態
であ る 必要があ り ます。
DXCL プ ロ ト コ ル ( ク リ テ ィ カル ワー ド フ ァ ース ト )
4. DCACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。
5. ク リ テ ィ カル ワー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。
6. キ ャ ッ シ ュ ラ イ ンの残 り の 3 ワ ー ド ま たは 7 ワー ド に対 し 、 手順 4 ~ 5 を繰 り 返 し ます。
DXCL2 プ ロ ト コ ル ( リ ニ ア フ ェ ッ チ)
3. DCACHE_FSL_IN_Data か ら の ワー ド を キ ャ ッ シ ュ に保存 し ます。
4. 要求 さ れた ワ ー ド を実行ユニ ッ ト に送信 し 、 実行を再開 し ます。
5. DCACHE_FSL_IN_Data か ら の残 り の ワー ド を キ ャ ッ シ ュ に保存 し ます。
デー タ キ ャ ッ シ ュ 書き込み
C_DCACHE_INTERFACE が 1 に設定 さ れてい る 場合、 CacheLink はバース ト 書 き 込みま たはシ
ン グル ワー ド 書 き 込みを実行す る こ と がで き ます。 C_DCACHE_USE_WRITEBACK が 1 に設定
さ れてい る 場合、 キ ャ ッ シ ュ ラ イ ン全体が有効です。
C_DCACHE_USE_WRITEBACK が ク リ ア さ れて 0 にな る 場合、 デー タ キ ャ ッ シ ュへの書 き込み
は常に ラ イ ト ス ルーなので、 キ ャ ッ シ ュ のデー タ 有無にかかわ ら ず、 CacheLink を介 し た書 き込み
が行われます。
DXCL2 プ ロ ト コ ルが選択 さ れてい る場合、バース ト キ ャ ッ シ ュ ラ イ ン書 き 込みで、キ ャ ッ シ ュ コ
ン ト ロ ー ラ は次のシーケ ン ス を実行 し ます。
1. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。
2. DCACHE_FSL_OUT_Data へのア ド レ ス にキ ャ ッ シ ュ を揃え た場合、 制御ビ ッ ト を High
(DCACHE_FSL_OUT_Control = 1) に設定 し て書き 込みア ク セ ス を示 し ます。こ のア ド レ ス の
最下位の 2 ビ ッ ト (30:31) は、0b10=burst のバース ト ア ク セ ス を エン コ ー ド す る ために使用 さ
れます。シ ン グル バ イ ト 書 き 込みか ら のバース ト ア ク セ ス を隔離す る には、ス テ ッ プ 4 の最初
のデー タ ワー ド の制御ビ ッ ト は、 バース ト ア ク セ ス に対 し 、 Low (DCACHE_FSL_OUT
_Control = 0) にな り ます。
3. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。
4. 保存す る デー タ を DCACHE_FSL_OUT_Data に書 き込みます。 制御ビ ッ ト はバース ト ア ク セ
ス に対 し 、 Low (DCACHE_FSL_OUT_Control = 0) です。
5. キ ャ ッ シ ュ ラ イ ンの後続ワ ー ド に対 し て手順 3 お よ び 4 を繰 り 返 し ます。
DXCL ま たは DXCL2 プ ロ ト コ ルでは、 シ ン グル ワ ー ド 書 き 込みで、 キ ャ ッ シ ュ コ ン ト ロ ー ラ は
次のシーケ ン ス を実行 し ます。
1. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
103
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
2. CACHE_FSL_OUT_Data に ミ ス し たア ド レ ス を書 き込み、 制御ビ ッ ト を High (DCACHE
_FSL_OUT_Control = 1) に設定 し て書 き込みア ク セ ス を示 し ます。 0b00=byte0、 0b01=byte1、
halfword0、 0x10=byte2、 0x11=byte3、 halfword1 な ど のバ イ ト イ ネーブルお よ びハーフ ワ ー
ド イ ネーブルのエン コー ド には、ア ド レ ス の最下位ビ ッ ト (30:31) の 2 ビ ッ ト が使用 さ れます。
手順 4 のデー タ の制御ビ ッ ト に よ っ てハーフ ワ ー ド ま たはバ イ ト ア ク セ ス のいずれかが選択
さ れます。
3. DCACHE_FSL_OUT_Full = 1 の場合、 こ の信号が Low にな る ま で動作を停止 し ます。
4. 保存す る デー タ を DCACHE_FSL_OUT_Data に書 き 込みます。 バ イ ト お よ びハーフ ワー ド ア
ク セ ス では、デー タ はバ イ ト レーンに書 き 込まれます。バ イ ト は 4 つのバ イ ト レーンすべてに、
ハーフ ワ ー ド は両方のハーフ ワ ー ド レーンに書き 込まれます。バース ト ア ク セ ス か ら 隔離す る
には、 制御ビ ッ ト は、 ワ ー ド お よ びハーフ ワ ー ド
ア ク セ ス では
Low
(DCACHE_FSL_OUT_Control = 0)、 バ イ ト ア ク セ ス では High であ る 必要があ り ます。 ワ ー
ド ア ク セ ス と ハーフ ワー ド ア ク セ スは、 ア ド レ ス の最下位ビ ッ ト で区別で き ます。 0 の場合は
ワ ー ド で、 1 の場合はハーフ ワ ー ド です。
デバ ッ グ イ ン タ ー フ ェ イ ス
MicroBlaze のデバ ッ グ イ ン タ ーフ ェ イ ス は、 ザ イ リ ン ク ス のマ イ ク ロ プ ロ セ ッ サ デバ ッ グ モ
ジ ュ ール (MDM) IP コ ア と 共に機能す る よ う に設計 さ れています。 MDM は、FPGA の JTAG ポー
ト を介 し て Xilinx Microprocessor Debugger (XMD) に よ り 制御 し ます。 MDM では、同時に複数の
MicroBlaze プ ロ セ ッ サを制御で き ます。 MicroBlaze のデバ ッ グ信号は、 DEBUG バ ス にグループ
化 さ れてい ます。 こ の信号を表 2-9 に示 し ます。
表 2-9 : MicroBlaze デバ ッ グ信号
信号名
説明
VHDL の型
方向
Dbg_Clk
MDM か ら の JTAG ク ロ ッ ク
std_logic
入力
Dbg_TDI
MDM か ら の JTAG TDI
std_logic
入力
Dbg_TDO
MDM への JTAG TDO
std_logic
出力
Dbg_Reg_En
MDM か ら のデバ ッ グ レ ジ ス タ
std_logic
入力
std_logic
入力
std_logic
入力
std_logic
入力
std_logic
入力
イ ネーブル
Dbg_Shift1
MDM か ら の JTAG BSCAN シ
フ ト 信号
Dbg_Capture
MDM か ら の JTAG BSCAN
キ ャ プチ ャ 信号
Dbg_Update
MDM か ら の JTAG BSCAN
ア ッ プデー ト 信号
Debug_Rst1
MDM から のリ セッ ト 信号 (ア
ク テ ィ ブ High)。 1 Clk ク ロ ッ
ク サイ ク ル以上保持する 必要
あり 。
1. MicroBlaze v7.00 では Dbg_Shift が追加 さ れ、 Debug_Rst は DEBUG バ ス に含 まれ る よ う にア ッ プデー ト
さ れてい ま す。
104
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ト レース イ ン タ ー フ ェ イ ス
ト レース イ ン タ ー フ ェ イ ス
MicroBlaze コ アは、 ト レース の目的で多数の内部信号を送信 し ます。 こ の信号の イ ン タ ーフ ェ イ ス
は標準化 さ れてお ら ず、 プ ロ セ ッ サの新 し い リ ビ ジ ョ ンでは、 同 じ 信号の選択ま たは機能がサポー
ト さ れない可能性があ り ます。 こ れ ら の信号にはカ ス タ ム ロ ジ ッ ク を設計する のではな く 、 ザ イ リ
ン ク ス の解析用 IP を使用す る こ と をお勧め し ます。 ト レース信号は、 TRACE バ ス にグループ化 さ
れてい ます。 MicroBlaze v7.00 向けに更新 さ れてい る ト レース信号を表 2-10 に、ト レース の例外の
タ イ プを表 2-11 に示 し ます。 未使用の例外はすべて予約済みです。
表 2-10 : MicroBlaze ト レース信号
信号名
説明
VHDL の型
方向
Trace_Valid_Instr
プ ロ セ ッ サ実行段の有効な命令
std_logic
出力
Trace_Instruction1
命令 コー ド
std_logic_vector
出力
(0 ~ 31)
Trace_PC1
プログラ ム カウン タ
std_logic_vector
出力
(0 ~ 31)
Trace_Reg_Write1
レ ジ ス タ フ ァ イ ルに書 き込む命令
std_logic
出力
Trace_Reg_Addr1
デス ティ ネーショ ン レ ジス タ アド レ ス
std_logic_vector
(0 ~ 4)
出力
Trace_MSR_Reg1
マシ ン ス テー タ ス レ ジ ス タ (MSR)
std_logic_vector
(0 ~ 14)2
出力
Trace_PID_Reg1,2
プ ロ セ ス識別レ ジ ス タ
std_logic_vector
(0 ~ 7)
出力
Trace_New_Reg_Value1
デス テ ィ ネーシ ョ ン レ ジ ス タ のア ッ プ
デー ト 値
std_logic_vector
(0 ~ 31)
出力
Trace_Exception_Taken1
例外の命令結果
std_logic
出力
Trace_Exception_Kind1,3
例外の タ イ プ。 次の表を参照。
std_logic_vector
(0 ~ 4)2
出力
Trace_Jump_Taken1
真であ る と 評価 さ れた分岐命令
std_logic
出力
Trace_Delay_Slot1
分岐の遅延ス ロ ッ ト に含まれ る命令
std_logic
出力
Trace_Data_Access1
有効なデー タ 側ア ク セ ス
std_logic
出力
Trace_Data_Address1
デー タ 側 メ モ リ ア ク セ ス のア ド レ ス
std_logic_vector
(0 ~ 31)
出力
Trace_Data_Write_Value1
有効なデー タ 側 メ モ リ 書 き 込みア ク
セス
std_logic_vector
(0 ~ 31)
出力
Trace_Data_Byte_Enable1
有効なデー タ 側 メ モ リ ア ク セ ス のバ イ
ト イ ネーブル
std_logic_vector
(0 ~ 3)
出力
Trace_Data_Read1
デー タ 側 メ モ リ ア ク セ スは読み出 し
std_logic
出力
Trace_Data_Write1
デー タ 側 メ モ リ ア ク セ スは書 き 込み
std_logic
出力
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
105
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-10 : MicroBlaze ト レース信号 (続き )
信号名
説明
VHDL の型
方向
Trace_DCache_Req
デー タ メ モ リ ア ド レ ス はデー タ
キ ャ ッ シ ュ範囲内
std_logic
出力
Trace_DCache_Hit
デー タ メ モ リ ア ド レ ス はデー タ
キ ャ ッ シ ュ に存在
std_logic
出力
Trace_ICache_Req
命令 メ モ リ ア ド レ スは命令キ ャ ッ シ ュ
範囲内
std_logic
出力
Trace_ICache_Hit
命令 メ モ リ ア ド レ スは メ モ リ キ ャ ッ
シ ュ に存在
std_logic
出力
Trace_OF_PipeRun
デ コ ー ド 段のパ イ プ ラ イ ン予約
std_logic
出力
Trace_EX_PipeRun4
実行段のパ イ プ ラ イ ン予約
std_logic
出力
Trace_MEM_PipeRun4
メ モ リ 段のパ イ プ ラ イ ン予約
std_logic
出力
Trace_MB_Halted2
パ イ プ ラ イ ンのデバ ッ グに よ る 停止
std_logic
出力
1. Trace_Valid_Instr = 1 の と き のみ有効
2. MicroBlaze v7.00 での変更 : Trace_MSR_Reg に 4 ビ ッ ト 追加、 Trace_PID_Reg の追加、
Trace_MB_Halted の追加、 Trace_Exception Kind に 1 ビ ッ ト 追加
3. Trace_Exception_Taken = 1 の と き のみ有効
4. エ リ ア最適化 と の同時使用不可
表 2-11 : ト レースの例外の タ イ プ
Trace_Exception_Kind [0:4]
説明
00000
高速シ ンプ レ ッ ク ス リ ン ク に よ る 例外1
00001
不整列デー タ ア ク セ ス に よ る 例外
00010
不正な op コ ー ド に よ る 例外
00011
命令バ ス に よ る 例外
00100
デー タ バ ス に よ る 例外
00101
0 での除算に よ る 例外
00110
FPU での例外
00111
特権命令に よ る 例外1
01010
割 り 込み
01011
マ ス ク 不可の外部ブ レー ク
01100
マ ス ク 可の外部ブ レー ク
10000
デー タ 格納に よ る 例外1
10001
命令格納に よ る 例外1
10010
デー タ TLB ミ ス に よ る例外1
10011
命令 TLB ミ ス に よ る例外1
1. MicroBlaze v7.00 で追加
106
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン
MicroBlaze コ アのコ ン フ ィ ギ ュ レーシ ョ ン
MicroBlaze コ アは、 ユーザーが柔軟に コ ン フ ィ ギ ュ レーシ ョ ンで き る よ う 開発 さ れてい る ため、 コ
ス ト お よ びパフ ォーマン ス の要件を満たす よ う 設定で き ます。
コ ン フ ィ ギ ュ レーシ ョ ンには、 通常プ ロ セ ッ サの特定の機能を イ ネーブルに し 、 サ イ ズ を設定す る
パ ラ メ ー タ を使用 し ます。 た と えば、命令キ ャ ッ シ ュ は C_USE_ICACHE パ ラ メ ー タ を設定す る こ
と に よ り イ ネーブルに し 、 命令キ ャ ッ シ ュ のサ イ ズは C_DCACHE_BYTE_SIZE、 キ ャ ッ シ ュ可能
な メ モ リ 範囲は C_ICACHE_BASEADDR お よ び C_ICACHE_HIGHADDR で指定 し ます。
MicroBlaze v7.00 で使用可能なパ ラ メ ー タ を表 2-12 に示 し ます。 こ れ ら のパ ラ メ ー タ には以前の
バージ ョ ンの MicroBlaze では認識 さ れない も の も あ り ますが、 コ ン フ ィ ギ ュ レーシ ョ ンには後方
互換性があ り ます。
メ モ : 影付き の行は、 パ ラ メ ー タ が固定で変更で き ない こ と を示 し ます。
表 2-12 : MPD パラ メ ー タ
パラ メ ー タ 名
機能/説明
許容値
ツールに
デ フ ォル ト 値 よ る自動 VHDL の型
割 り 当て
C_FAMILY
ターゲ ッ ト フ ァ ミ リ
aspartan3
aspartan3a
aspartan3adsp
aspartan3e
spartan3
spartan3a
spartan3adsp
spartan3an
spartan3e
spartan6
qrvirtex4
qvirtex4
virtex4
virtex5
virtex6
virtex5
あり
文字列
C_DATA_SIZE
デー タ サ イ ズ
32
32
なし
整数
1
1
なし
整数
なし
整数
C_DINAMIC_BUS_SIZING
C_SCO
ザ イ リ ン ク ス内部
0
0
C_AREA_OPTIMIZED
低い命令 ス ループ ッ ト でエ リ ア を
最 適化す る た め の イ ン プ リ メ ン
テーシ ョ ンの選択
0、 1
0
整数
C_INTERCONNECT
PLB イ ン タ ー コ ネ ク ト の選択
0、 1
1
整数
C_PVR
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ
のモー ド 選択
0、 1、 2
0
整数
C_PVR_USER1
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ
USER1 の定数
0x00 ~ 0xff
0x00
std_logic_
vector
(0 ~ 7)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
107
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-12 : MPD パラ メ ー タ (続き )
パラ メ ー タ 名
ツールに
デ フ ォル ト 値 よ る自動 VHDL の型
割 り 当て
機能/説明
許容値
C_PVR_USER2
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ
USER2 の定数
0x00000000
~ 0xffffffff
C_RESET_MSR
MSR の リ セ ッ ト 値
0x00 、 0x20 、 0x00
0x80、 0xa0
C_INSTANCE
イ ン ス タ ン ス名
任意 の イ ン ス
タ ン ス名
microblaze
あり
文字列
C_D_PLB
デー タ側 PLB イ ン タ ーフ ェ イ ス
0、 1
0
あり
整数
C_D_OPB
デー タ側 OPB イ ン タ ーフ ェ イ ス
0、 1
1
あり
整数
C_D_LMB
デー タ側 LMB イ ン タ ーフ ェ イ ス
0、 1
1
あり
整数
C_I_PLB
命令側 PLB イ ン タ ーフ ェ イ ス
0、 1
0
あり
整数
C_I_OPB
命令側 OPB イ ン タ ーフ ェ イ ス
0、 1
1
あり
整数
C_I_LMB
命令側 LMB イ ン タ ーフ ェ イ ス
0、 1
1
あり
整数
C_USE_BARREL
バ レル シ フ タ を使用
0、 1
0
整数
C_USE_DIV
ハー ド ウ ェ ア除算器を使用
0、 1
0
整数
C_USE_HW_MUL
ハー ド ウ ェ ア乗算器を使用
0、 1、 2
1
整数
C_USE_FPU
ハー ド ウ ェ ア浮動小数点ユニ ッ ト
を使用
0、 1、 2
0
整数
C_USE_MSR_INSTR
MSRSET お よ び MSRCLR 命令
0、 1
1
整数
0、 1
1
整数
0x00000000
std_logic_
vector
(0 ~ 31)
std_logic_
vector
を イ ネーブルにする
C_USE_PCMP_INSTR
PCMPBF、 PCMPEQ、 PCMPNE
命令を イ ネーブルにする
C_UNALIGNED_
EXCEPTIONS
不整列デー タ ア ク セ ス に対す る 例
外処理を イ ネーブルにする
0、 1
0
整数
C_ILL_OPCODE_
EXCEPTION
不正な op コ ー ド に対す る例外処
理を イ ネーブルにする
0、 1
0
整数
C_IPLB_BUS_EXCEPTION
IPLB バ ス エ ラ ーに対す る例外処
0、 1
0
整数
0、 1
0
整数
0、 1
0
整数
0、 1
0
整数
理を イ ネーブルにする
C_DPLB_BUS_EXCEPTION
DPLB バ ス エ ラ ーに対す る例外処
理を イ ネーブルにする
C_IOPB_BUS_EXCEPTION
IOPB バ ス エ ラ ーに対す る例外処
理を イ ネーブルにする
C_DOPB_BUS_EXCEPTION
DOPB バス エ ラ ーに対す る例外
処理を イ ネーブルにする
108
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン
表 2-12 : MPD パラ メ ー タ (続き )
パラ メ ー タ 名
C_DIV_ZERO_EXCEPTION
機能/説明
0 での除算お よ び除算オーバーフ
許容値
ツールに
デ フ ォル ト 値 よ る自動 VHDL の型
割 り 当て
0、 1
0
整数
ロ ーに対す る 例外処理を イ ネーブ
ルにす る
C_FPU_EXCEPTION
ハー ド ウ ェ ア浮動小数点ユニ ッ ト
に関す る 例外処理を イ ネーブルに
する
0、 1
0
整数
C_OPCODE_0x0_ILLEGAL
op コ ー ド 0x0 を不正な命令 と し
0、 1
0
整数
て検出
C_FSL_EXCEPTION
高速シ ンプ レ ッ ク ス リ ン ク に対す
る 例外処理を イ ネーブルにする
0、 1
0
整数
C_DEBUG_ENABLED
MDM デバ ッ グ イ ン タ ーフ ェ イ ス
0、 1
0
整数
C_NUMBER_OF_PC_BRK
ハー ド ウ ェ ア ブ レー ク ポ イ ン ト 数
0~8
1
整数
C_NUMBER_OF_RD_ADDR
_BRK
読み出 し ア ド レ ス ウ ォ ッ チポ イ ン
ト数
0~4
0
整数
C_NUMBER_OF_WR_
ADDR_BRK
書 き 込みア ド レ ス ウ ォ ッ チポ イ ン
ト数
0~4
0
整数
C_INTERRUPT_IS_EDGE
レベル/エ ッ ジ割 り 込み
0、 1
0
あり
整数
C_EDGE_IS_POSITIVE
立ち上が り / 立ち下が り エ ッ ジ割
り 込み
0、 1
1
あり
整数
C_FSL_LINKS1
FSL イ ン タ ーフ ェ イ ス の数
0 ~ 16
0
あり
整数
C_FSL_DATA_SIZE
FSL のデー タ バス サ イ ズ
32
32
なし
整数
C_USE_EXTENDED_FSL_
INSTR
拡張 FSL 命令の使用を イ ネーブル
にする
0、 1
0
整数
C_ICACHE_BASEADDR
命令キ ャ ッ シ ュ のベース ア ド レ ス
0x00000000 ~
0xFFFFFFFF
0x00000000
std_logic_
vector
C_ICACHE_HIGHADDR
命令キ ャ ッ シ ュ のハ イ ア ド レ ス
0x00000000 ~
0xFFFFFFFF
0x3FFFFFFF
std_logic_
vector
C_USE_ICACHE
命令キ ャ ッ シ ュ
0、 1
0
整数
C_ALLOW_ICACHE_WR
命令キ ャ ッ シュ ラ イ ト イ ネーブル
0、 1
1
整数
C_ICACHE_LEN
命令キ ャ ッ シ ュ ラ イ ンの長 さ
4、 8
4
整数
C_ICACHE_ALWAYS_USED
命令キ ャ ッ シ ュ の CacheLink をす
べての メ モ リ ア ク セ ス に使用
0、 1
1
整数
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
109
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
表 2-12 : MPD パラ メ ー タ (続き )
パラ メ ー タ 名
C_ICACHE_INTERFACE
機能/説明
命令キ ャ ッ シ ュ CacheLink
イ ン ターフ ェ イ ス プ ロ ト コ ル
ツールに
デ フ ォル ト 値 よ る自動 VHDL の型
割 り 当て
許容値
0、 1
0
あ り2
整数
あり
整数
0 = IXCL
1 = IXCL2
C_ADDR_TAG_BITS
命令キ ャ ッ シ ュ のア ド レ ス タ グ
0 ~ 25
17
C_CACHE_BYTE_SIZE
命令キ ャ ッ シ ュ サ イ ズ
64、 128、
256、 512、
1024、 2048、
4096、 8192、
16384、
32768、
655363
8192
整数
C_ICACHE_USE_FSL
OPB の代わ り に CacheLink を命
1
1
整数
令キ ャ ッ シ ュ に使用
C_DCACHE_BASEADDR
デー タ キ ャ ッ シ ュ のベース ア ド
レス
0x00000000 ~
0xFFFFFFFF
0x00000000
std_logic_
vector
C_DCACHE_HIGHADDR
データ キャ ッ シュ のハイ アド レ ス
0x00000000 ~
0xFFFFFFFF
0x3FFFFFFF
std_logic_
vector
C_USE_DCACHE
デー タ キ ャ ッ シ ュ
0、 1
0
整数
C_ALLOW_DCACHE_WR
デー タ キ ャ ッ シ ュ ラ イ ト イ ネー
ブル
0、 1
1
整数
C_DCACHE_LEN
デー タ キ ャ ッ シ ュ ラ イ ンの長 さ
4、 8
4
整数
C_DCACHE_ALWAYS
_USED
デー タ キ ャ ッ シ ュ の CacheLink
をすべてのア ク セ ス に使用
0、 1
1
整数
C_DCACHE_INTERFACE
デー タ キ ャ ッ シ ュ CacheLink
イ ン ターフ ェ イ ス プ ロ ト コ ル
0、 1
0
あ り2
整数
0 = DXCL
1 = DXCL2
C_DCACHE_USE_WRITEB
ACK
デー タ キ ャ ッ シ ュ ラ イ ト バ ッ ク
格納ポ リ シーを使用
0、 1
0
C_DCACHE_ADDR_TAG
データ キャ ッ シュ のアド レ ス タ グ
0 ~ 25
17
110
japan.xilinx.com
整数
あり
整数
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
MicroBlaze コ アの コ ン フ ィ ギ ュ レーシ ョ ン
表 2-12 : MPD パラ メ ー タ (続き )
パラ メ ー タ 名
機能/説明
許容値
ツールに
デ フ ォル ト 値 よ る自動 VHDL の型
割 り 当て
C_DCACHE_BYTE_SIZE
デー タ キ ャ ッ シ ュ サ イ ズ
64、 128、
256、 512、
1024、 2048、
4096、 8192、
16384、
32768、
655363
8192
整数
C_DCACHE_USE_FSL
OPB の代わ り に CacheLink を
デー タ キ ャ ッ シ ュ に使用
1
1
整数
C_DPLB_DWIDTH
デー タ側 PLB のデー タ 幅
32
32
整数
C_DPLB_NATIVE_DWIDTH
デー タ側 PLB 固有のデー タ 幅
32
32
整数
C_DPLB_BURST_EN
データ 側 PLB バース ト イ ネーブル
0
0
整数
C_DPLB_P2P
デー タ側 PLB Point-to-point
0、 1
0
整数
C_IPLB_DWIDTH
命令側 PLB のデー タ 幅
32
32
整数
C_IPLB_NATIVE_DWIDTH
命令側 PLB 固有のデー タ 幅
32
32
整数
C_IPLB_BURST_EN
命令側 PLB バース ト イ ネーブル
0
0
整数
C_IPLB_P2P
命令側 PLB Point-to-point
0、 1
0
整数
C_USE_MMU4
メ モ リ 管理
0、 1、 2、 3
0
整数
4
整数
0 : なし
1 : ユーザー モー ド
2 : 保護
3 : 仮想
C_MMU_DTLB_SIZE4
デー タ シ ャ ド ウ TLB のサ イ ズ
1、 2、 4、 8
C_MMU_ITLB_SIZE4
命令シ ャ ド ウ TLB のサ イ ズ
1、 2、 4、 8
C_MMU_TLB_ACCESS4
メ モ リ 管理用の特殊 レ ジ ス タ への
ア クセス
0、 1、 2、 3
3
整数
整数
整数
0 : 最小
1 : 読み出 し
2 : 書 き 込み
3 : フル ア ク セ ス
C_MMU_ZONES4
メ モ リ 保護ゾーンの数
0 ~ 16
16
C_USE_INTERRUPT
割 り 込み処理を有効
0、 1
0
あり
整数
C_USE_EXT_BRK
外部ブ レー ク 処理を有効
0、 1
0
あり
整数
C_USE_EXT_NM_BRK
外部マ ス ク 不可のブ レー ク を有効
0、 1
0
あり
整数
1. コ プ ロ セ ッ サ ウ ィ ザー ド を使用 し てい る 場合は、 FSL リ ン ク の数はツールに よ り 割 り 当て ら れ ます。 手動で IP を追加す る 場合は、 パ ラ
メ ー タ も 手動でア ッ プデー ト し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
111
第 2 章 : MicroBlaze の信号イ ン タ ー フ ェ イ ス
2. EDK ツールで割 り 当て ら れた値は手動で割 り 当て ら れた値に上書 き さ れ ます。
3. すべてのアーキ テ ク チ ャ ですべてのサ イ ズが設定で き る わけではあ り ません。 キ ャ ッ シ ュ では、 0 ~ 32 個の RAMB プ リ ミ テ ィ ブが使用
さ れ ます。 キ ャ ッ シ ュ サ イ ズが 2048 未満の場合は 0 です。
4. C_AREA_OPTIMIZED が 1 に設定 さ れてい る 場合は使用で き ま せん。
112
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
第3章
MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ
イ ン タ ー フ ェ イ ス (ABI)
こ の章では、 ソ フ ト
プ ロ セ ッ サに対 し てアセンブ リ 言語で ソ フ ト ウ ェ ア を開発す る上で重要な
MicroBlaze™ のアプ リ ケーシ ョ ン バ イ ナ リ イ ン タ ーフ ェ イ ス (ABI) について説明 し ます。
MicroBlaze の GNU コ ンパ イ ラ は こ の章に記述 さ れてい る 規則に従 う ので、アセ ンブ リ プ ロ グ ラ マ
で記述 さ れ る コ ー ド も 、 コ ンパ イ ラ で生成 さ れ る コー ド と 互換性を持たせ る ため、 同 じ 規則に従 う
必要があ り ます。 割 り 込みお よ び例外処理について も 簡単に説明 し ます。
こ の章は次のセ ク シ ョ ン よ り 構成 さ れてい ます。
•
デー タ 型
•
レ ジ ス タ の使用規則
•
ス タ ッ ク の規則
•
メ モ リ モデル
•
割 り 込みお よ び例外処理
デー タ 型
MicroBlaze アセ ンブ リ プ ロ グ ラ ムで使用 さ れ るデー タ 型を、表 3-1 に示 し ます。 data8、 data16、お
よ び data32 の よ う なデー タ 型は、 通常のバ イ ト 、 ハーフバ イ ト 、 お よ びワ ー ド で使用 さ れます。
表 3-1 : MicroBlaze アセ ン ブ リ プ ログ ラ ムでのデー タ 型
MicroBlaze のデー タ 型
( アセ ン ブ リ プ ログ ラ ム用)
対応する ANSI C
デー タ 型
サイ ズ (バイ ト )
data8
char
1
data16
short
2
data32
int
4
data32
long int
4
data32
float
4
data32
enum
4
data16/data32
pointera
2/4
a. グ ロ ーバル ポ イ ン タ でア ク セ ス可能な ス モール デー タ 領域へのポ イ ン タ は、
deta16 です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
113
第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
レ ジ ス タ の使用規則
MicroBlaze に対す る レ ジ ス タ の使用規則を表 3-2 に示 し ます。
表 3-2 : レ ジ ス タ の使用規則
レジス タ
タ イプ
対象
用途
R0
専用
ハー ド ウ ェ ア
値0
R1
専用
ソ フ ト ウェア
ス タ ッ ク ポインタ
R2
専用
ソ フ ト ウェア
読み出 し 専用の ス モール デー タ 領域ア ン カー
R3 ~ R4
揮発性
ソ フ ト ウェア
戻 り 値/一時保存
R5 ~ R10
揮発性
ソ フ ト ウェア
パ ラ メ ー タ の引渡 し /一時保存
R11 ~ R12
揮発性
ソ フ ト ウェア
一時保存
R13
専用
ソ フ ト ウェア
読み出 し /書 き込みの ス モール デー タ 領域ア ン カー
R14
専用
ハー ド ウ ェ ア
割 り 込みの戻 り ア ド レ ス
R15
専用
ソ フ ト ウェア
サブルーチンの戻 り ア ド レ ス
R16
専用
ハー ド ウ ェ ア
ト ラ ッ プ用の戻 り ア ド レ ス (デバ ッ ガ )
R17
専用
ハー ド ウ ェ ア
( サポー ト し てい
る 場合)、 それ
以外の場合は
ソ フ ト ウェア
例外用の戻 り ア ド レ ス
R18
専用
ソ フ ト ウェア
アセンブ ラ 用に予約済み/ コ ンパ イ ラ 一時保存
R19
不揮発性
ソ フ ト ウェア
関数呼び出 し を越え て保存す る必要あ り 、
callee-save
R20
専用
ま たは
不揮発性
ソ フ ト ウェア
R21 ~ R31
不揮発性
ソ フ ト ウェア
PIC (Position Independent Code) では GOT
(Global Offset Table) へのポ イ ン タ の格納用に予
約済み。非 PIC コー ド では不揮発性。 関数呼び出 し
を越え て保存す る必要あ り 、 callee-save
関数呼び出 し を越え て保存す る必要あ り 、
callee-save
114
RPC
特殊
ハー ド ウ ェ ア
プログラ ム カウン タ
RMSR
特殊
ハー ド ウ ェ ア
マシ ン ス テー タ ス レ ジ ス タ
REAR
特殊
ハー ド ウ ェ ア
例外ア ド レ ス レ ジ ス タ
RESR
特殊
ハー ド ウ ェ ア
例外ス テー タ ス レ ジ ス タ
RFSR
特殊
ハー ド ウ ェ ア
浮動小数点ス テー タ ス レ ジ ス タ
RBTR
特殊
ハー ド ウ ェ ア
分岐 タ ーゲ ッ ト レ ジ ス タ
REDR
特殊
ハー ド ウ ェ ア
例外デー タ レ ジ ス タ
RPID
特殊
ハー ド ウ ェ ア
プ ロ セ ス識別レ ジ ス タ
RZPR
特殊
ハー ド ウ ェ ア
ゾーン保護レ ジ ス タ
RTLBLO
特殊
ハー ド ウ ェ ア
変換ル ッ ク アサ イ ド バ ッ フ ァ Low レ ジ ス タ
RTLBHI
特殊
ハー ド ウ ェ ア
変換ル ッ ク アサ イ ド バ ッ フ ァ High レ ジ ス タ
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
ス タ ッ ク の規則
表 3-2 : レ ジ ス タ の使用規則
レジス タ
タ イプ
対象
用途
RTLBX
特殊
ハー ド ウ ェ ア
変換ル ッ ク アサ イ ド バ ッ フ ァ イ ンデ ッ ク ス レ ジ
スタ
RTLBSX
特殊
ハー ド ウ ェ ア
変換ル ッ ク アサ イ ド バ ッ フ ァ 検索 イ ンデ ッ ク ス
RPVR0 ~
RPVR11
特殊
ハー ド ウ ェ ア
プ ロ セ ッ サ バージ ョ ン レ ジ ス タ 0 ~11
MicroBlaze アーキテ ク チ ャ では、 32 個の汎用レ ジ ス タ (GPR) が定義 さ れます。 こ れ ら の レ ジ ス タ
は、 揮発性、 不揮発性、 お よ び専用に分類 さ れます。
•
揮発性レ ジ ス タ (caller-save) は、 一時保存 と し て使用 さ れ、 関数呼び出 し を越え て値を保持す
る こ と はあ り ません。 R3 ~ R12 の レ ジ ス タ は揮発性で、 R3 お よ び R4 は呼び出 し 関数の戻 り
値に使用 さ れます。 R5 ~ R10 の レ ジ ス タ は、 サブルーチン間のパ ラ メ ー タ の引 き渡 し に使用
さ れます。
•
R19 ~ R31 の レ ジ ス タ では、関数呼び出 し を越え て値が保持 さ れ る ので、不揮発性の レ ジ ス タ
(callee-save) と 定義 さ れてい ます。 呼び出 さ れ る側の関数で、 こ れ ら の不揮発性の レ ジ ス タ が
保存 さ れ、使用 さ れます。 こ れ ら は、通常プ ロ ロ ーグ中に ス タ ッ ク に保存 さ れ、 エ ピ ロ ーグ中に
再び読み込まれます。
•
レ ジ ス タ には、 専用レ ジ ス タ と し て使用 さ れ る も の も あ り 、 プ ロ グ ラ マでは こ れ ら の レ ジ ス タ
がほかの用途に使用 さ れ る こ と はあ り ません。
♦ R14 ~ R17 の レ ジ ス タ は、 割 り 込み、 サブルーチン、 ト ラ ッ プ、 例外 と い う 順序で戻 り ア
ド レ ス を格納す る のに使用 さ れます。 サブルーチンは、 分岐お よ び リ ン ク 命令を使用 し て
呼び出 さ れ、 こ れ ら の命令では、 現在のプ ロ グ ラ ム カ ウ ン タ (PC) が レ ジ ス タ R15 に保存
さ れます。
♦
ス モール デー タ 領域ポ イ ン タ は、 16 ビ ッ ト の即値があ る メ モ リ ロ ケーシ ョ ンにア ク セ ス
す る のに使用 さ れます。 こ れ ら の領域については、 「 メ モ リ モデル」 で説明 し ます。 読み出
し 専用の ス モール デー タ 領域 (SDA) ア ン カー R2 (読み出 し 専用) は、リ テ ラ ルの よ う な定
数にア ク セ スす る のに使用 さ れます。 ま た SDA ア ン カー R13 (読み出 し /書 き 込み) は、 ス
モール デー タ読み出 し /書 き込みセ ク シ ョ ンの値にア ク セ スす る のに使用 さ れます。
♦ レ ジ ス タ R1 には、 ス タ ッ ク ポ イ ン タ の値が格納 さ れ、関数の入力 と 終了で更新 さ れます。
♦ レ ジ ス タ R18 は、 アセ ンブ ラ 操作の一時レ ジ ス タ と し て使用 さ れます。
•
MicroBlaze には、 プ ロ グ ラ ム カ ウ ン タ (rpc)、 マシ ン ス テー タ ス レ ジ ス タ (rmsr)、例外ス テー
タ ス レ ジ ス タ (resr)、 例外ア ド レ ス レ ジ ス タ (rear)、 浮動小数点ユニ ッ ト ス テー タ ス レ ジ ス タ
(rfsr)、分岐 タ ーゲ ッ ト レ ジ ス タ (rbtr)、例外デー タ レ ジ ス タ (redr)、 メ モ リ 管理レ ジ ス タ (rpid、
rzpr、 rtlblo、 rtlbhi、 rtlbx、 rtlbsx)、 プ ロ セ ッ サ バージ ョ ン レ ジ ス タ (rpvr0 ~ rpvr11) な ど の
特殊用途レ ジ ス タ があ り ます。 こ れ ら の レ ジ ス タ は直接レ ジ ス タ フ ァ イ ルにマ ッ プ さ れていな
いため、使用法は汎用レ ジ ス タ と は異な り ます。特殊用途レ ジ ス タ の値は、 mts 命令を使用 し て
汎用レ ジ ス タ に、 mfs 命令を使用 し て汎用レ ジ ス タ か ら 転送で き ます。
ス タ ッ クの規則
MicroBlaze で使用す る ス タ ッ ク の規則を表 3-3 に示 し ます。
表 3-3 の影付 き の部分は、呼び出 し 側の関数の ス タ ッ ク フ レームの部分を示 し 、影な し の部分は、呼
び出 さ れ る 側の フ レーム関数を示 し ます。 ス タ ッ ク フ レームの ABI 規則では、 パ ラ メ ー タ の引渡
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
115
第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
し 、 不揮発性レ ジ ス タ の値の保持、 お よ び関数内の ロ ーカル変数に対す る スペース の割 り 当てに関
す る プ ロ ト コ ルが定義 さ れています。
ほかのサブルーチンの呼び出 し を含む関数は非 リ ーフ関数 と 呼ばれます。 こ れ ら の非 リ ーフ関数で
は、使用する ス タ ッ ク フ レーム領域を新規に作成す る必要があ り ます。 ス タ ッ ク ポ イ ン タ の値はプ
ロ グ ラ ムの開始時に最大で、 関数が呼び出 さ れ る たびに、 各関数の ス タ ッ ク フ レームで必要 と な る
ワ ー ド 数分だけ減少 し ます。 呼び出 し 側の関数の ス タ ッ ク ポ イ ン タ の値は、 呼び出 さ れ る側の関数
の ス タ ッ ク ポ イ ン タ の値に比べて大 き いのが通常です。
表 3-3 : ス タ ッ ク の規則
ハイ ア ド レ ス
呼び出 さ れたサブルーチンに対す る関数パ ラ メ ー タ (Arg n ..Arg1)
( オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ
で必要 と な る引数の最大数)
古い ス タ ッ ク ポ イ ン タ
リ ン ク レ ジ ス タ (R15)
呼び出 さ れ る側で保存 さ れた レ ジ ス タ (R31.....R19)
( オプシ ョ ン : 現在のプ ロ シージ ャ で使用 さ れ る レ ジ ス タ のみが保
存さ れる)
現在のプ ロ シージ ャ に対す る ロ ーカル変数
( オプシ ョ ン : プ ロ シージ ャ で ロ ーカルが定義 さ れてい る と き のみ
表示)
フ ァ ン ク シ ョ ン パ ラ メ ー タ (Arg n .. Arg 1)
( オプシ ョ ン : 現在のプ ロ シージ ャ か ら 呼び出 さ れたプ ロ シージ ャ
で必要 と な る引数の最大数)
新し いス タ ッ ク ポ イ ン タ
リ ン ク レジス タ
下位ア ド レ ス
た と えば、 Func1 が Func2 を呼び出 し 、 Func2 が Func3 を呼び出す と し ます。 それぞれの イ ン ス タ
ン ス での ス タ ッ ク 表現を図 3-1 に示 し ます。 Func1 か ら の Func2 の呼び出 し 後に、ス タ ッ ク ポ イ ン
タ (SP) の値は減少 し ます。 こ の SP 値は、Func3 の ス タ ッ ク フ レームに対応 し て さ ら に減少 し ます。
Func3 か ら 戻 る と 、 SP 値は Func 2 の元の値ま で増加 し ます。
図 3-1 を見 る と 、 ど の よ う に ス タ ッ ク が保持 さ れ る かがわか り ます。
116
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
メ モ リ モデル
High Memory
Func 1
Func 1
Func 1
Func 1
Func 2
Func 2
Func 2
SP
SP
SP
Func 3
Low Memory
SP
X9584
図 3-1 : ス タ ッ ク フ レーム
呼び出 し 規則
呼び出 し 側の関数は、 レ ジ ス タ (R5 ~ R10) ま たは固有の ス タ ッ ク フ レーム を使用 し てパ ラ メ ー タ
を呼び出 さ れ る 側の関数に渡 し ます。 読み出 さ れ る側では、 呼び出 し 側の ス タ ッ ク 領域を使用 し て
渡 さ れたパ ラ メ ー タ を格納 し ます。
図 3-1 を参照 し て く だ さ い。 Func2 のパ ラ メ ー タ は、レ ジ ス タ R5 ~ R10 ま たは Func1 に割 り 当て
ら れた ス タ ッ ク フ レームに格納 さ れます。
メ モ リ モデル
MicroBlaze の メ モ リ モデルは、 デー タ を、 ス モール デー タ 領域、 デー タ 領域、 共有の未初期化領
域、 リ テ ラ ルま たは定数の 4 つの領域に分類 し ます。
ス モール デー タ 領域
サ イ ズが小 さ く 、 グ ロ ーバルに初期化 さ れた変数が こ の領域に格納 さ れます。 こ の ス モール
デー タ 領域に格納 さ れ る変数のサ イ ズ を決定す る し き い値は、 MicroBlaze の C コ ンパ イ ラ
(mb-gcc) で 8 バ イ ト に設定 さ れてい ますが、コ ンパ イ ラ で コ マ ン ド ラ イ ンのオプシ ョ ン を使用
し て変更可能です。 こ のオプシ ョ ンの詳細は、『エンべデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マ
ニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。 ス モール デー タ領域には、
64KB の メ モ リ が割 り 当て ら れます。 こ の ス モール デー タ 領域には、読み出 し /書 き込み可能な
ス モール デー タ 領域ア ン カー (R13) お よ び 16 ビ ッ ト のオ フ セ ッ ト を使用 し てア ク セ ス し ま
す。 こ の領域にサ イ ズの小 さ い変数を割 り 当て る と 、 グ ロ ーバル変数にア ク セ スす る コー ド に
IMM 命令を追加す る必要がな く な り ます。 こ のエ リ アに含まれ る 変数は、絶対ア ド レ ス を使用
し て も ア ク セ ス で き ます。
デー タ 領域
値が比較的大 き く 初期化 さ れた変数は、 デー タ 領域に割 り 当て ら れます。 こ の領域には、 コ ン
パ イ ラ の コ マン ド ラ イ ン オプシ ョ ンに よ っ て、読み出 し /書 き込み可能な SDA ア ン カー (R13)
ま たは絶対ア ド レ ス を使用 し てア ク セ ス で き ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
117
第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
共有の未初期化領域
初期化 さ れていないグ ロ ーバル変数は、 共有の領域に割 り 当て ら れます。 こ の領域には、 絶対ア ド
レ ス ま たは読み出 し /書 き込み可能な ス モール デー タ 領域ア ン カー (R13) を使用 し てア ク セ ス で き
ます。
リ テ ラルまたは定数
定数は、読み出 し 専用の ス モール デー タ 領域に配置 さ れ、読み出 し 専用の ス モール デー タ 領域ア ン
カー (R2) を使用 し てア ク セ ス さ れます。
コ ンパ イ ラ で、 ベース ポ イ ン タ と し て動作す る グ ロ ーバル ポ イ ン タ が生成 さ れます。 SDA ア ン
カーの値は、 最終の リ ン ク 段階で リ ン カに よ り 決定 さ れます。 メ モ リ の さ ま ざ ま なセ ク シ ョ ンの詳
細は、 『エンべデ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「MicroBlaze リ ン カ ス ク リ プ
ト で割 り 当て ら れ る セ ク シ ョ ン」 を参照 し て く だ さ い。 コ ンパ イ ラ では、 使用 さ れ る コ マ ン ド ラ イ
ン オプシ ョ ンに応 じ て適切なセ ク シ ョ ンが生成 さ れます。 こ れ ら のオプシ ョ ンについては、『エンべ
デ ッ ド シ ス テ ム ツール リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て
く だ さ い。
118
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
割 り 込みおよび例外処理
割 り 込みおよび例外処理
MicroBlaze では、表 3-4 に示す よ う に、割 り 込みお よ び例外処理に対 し て、特定のア ド レ ス ロ ケー
シ ョ ンが使用 さ れます。 こ れ ら の ロ ケーシ ョ ンの コー ド は、 適切なハン ド ラ にジ ャ ンプす る よ う 記
述 さ れてい ます。
表 3-4 : 割 り 込みおよび例外処理
イベン ト
ソ フ ト ウ ェ ア ラ ベル
ハー ド ウ ェ アのジ ャ ン プ先
開始/ リ セ ッ ト
0x0
_start
ユーザー例外
0x8
_exception_handler
割 り 込み
0x10
_interrupt_handler
ブ レー ク (ハー ド ウ ェ ア /
ソ フ ト ウ ェ ア)
0x18
-
ハー ド ウ ェ ア例外
0x20
_hw_exception_handler
将来の使用に予約
0x28 ~ 0x4F
-
こ れ ら の ロ ケーシ ョ ンに記述 さ れてい る コ ー ド を次に示 し ます。 -xl-mode-xmdstub コ ンパ イ ラ オ
プシ ョ ン を使用せずに コ ンパ イ ル さ れたプ ロ グ ラ ムの場合、 mb-ld リ ン カで crt0.o 初期化フ ァ イ ル
が使用 さ れ、 例外ハン ド ラ での適切なア ド レ ス が設定 さ れます。
-xl-mode-xmdstub コ ンパ イ ラ オプシ ョ ン を使用 し て コ ンパ イ ル さ れたプ ロ グ ラ ムの場合、crt1.o 初
期化フ ァ イ ルが出力プ ロ グ ラ ムに リ ン ク さ れます。 こ のプ ロ グ ラ ムは、 ア ド レ ス ロ ケーシ ョ ン 0x0
に XMDStub が含まれてい る場合にのみ実行で き ます。 ラ ン タ イ ムには、 例外お よ び割 り 込みハン
ド ラ のア ド レ ス に応 じ て、crt1.o の初期化 コー ド に よ り 適切な命令が ロ ケーシ ョ ン 0x8 ~ 0x14 に書
き込まれます。
例外お よ び割 り 込みハン ド ラ に制御を渡す コー ド を次に示 し ます。
0x00:
0x04:
0x08:
0x0c:
0x10:
0x14:
0x20:
0x24:
bri
nop
imm
bri
imm
bri
imm
bri
_start1
high bits of address (user exception handler)
_exception_handler
high bits of address (interrupt handler)
_interrupt_handler
high bits of address (HW exception handler
_hw_exception_handler
MicroBlaze では、32 ビ ッ ト で指定可能な ア ド レ ス ロ ケ ーショ ン であ れば、ど こ にでも 例外およ び
割り 込みハン ド ラ ルーチン を 配置でき ま す。 ユーザー例外ハン ド ラ のコ ード はラ ベル __handler
で、ハー ド ウ ェ ア例外ハン ド ラ の コ ー ド は ラ ベル _hw__handler で、割 り 込みハン ド ラ の コー ド は ラ
ベル _interrupt_handler で始ま り ます。
現段階の MicroBlaze シ ス テ ムでは、 割 り 込みお よ び例外処理に対 し てユーザーが変更可能なダ
ミ ー ルーチンがあ り ます。 こ れ ら のダ ミ ー ルーチンの代わ り に、独自の割 り 込みハン ド ラ お よ び例
外ハン ド ラ を リ ン ク す る には、 割 り 込みハン ド ラ の コ ー ド を属性 interrupt_handler で定義す る必要
があ り ます。 割 り 込みハン ド ラ 属性の使用方法お よ び構文の詳細は、 『エンべデ ッ ド シ ス テ ム ツー
ル リ フ ァ レ ン ス マニ ュ アル』 の 「GNU コ ンパ イ ラ ツール」 の章を参照 し て く だ さ い。
XMD (Xilinx Microprocessor Debug) ツールで ソ フ ト ウ ェ アのブ レー ク ポ イ ン ト が使用 さ れ る場合
は、ハー ド ウ ェ アお よ び ソ フ ト ウ ェ アのブ レー ク ア ド レ ス ロ ケーシ ョ ンは、 ソ フ ト ウ ェ アのブ レー
ク ポ イ ン ト の処理用に予約 さ れています。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
119
第 3 章 : MicroBlaze ア プ リ ケーシ ョ ン バイ ナ リ イ ン タ ー フ ェ イ ス (ABI)
120
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
第4章
MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
こ の章では、MicroBlaze™ の命令セ ッ ト アーキ テ ク チ ャ について詳 し く 説明 し ます。次のセ ク シ ョ
ン よ り 構成 さ れています。
•
表記法
•
フ ォーマ ッ ト
•
命令
表記法
こ の章で使用 さ れ る シ ン ボルの定義を表 4-1 に示 し ます。
表 4-1 : シ ンボル表記
シ ンボル
意味
+
加算
-
減算
×
乗算
∧
ビ ッ ト 単位の論理積 (AND)
∨
ビ ッ ト 単位の論理和 (OR)
⊕
ビ ッ ト 単位の排他論理和 (XOR)
x
x のビ ッ ト 単位の論理補数
←
代入
>>
右方向へシ フ ト
<<
左方向へシ フ ト
rx
レジス タ x
x[i]
レジ ス タ x のビ ッ ト i
x[i:j]
レジ ス タ x のビ ッ ト i ~ j
=
等価
≠
非等価
>
大な り
>=
以上
<
小な り
<=
以下
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
121
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
表 4-1 : シ ンボル表記(続き )
シ ンボル
意味
sext(x)
符号拡張 x
Mem(x)
ア ド レ ス x の メ モ リ ロ ケーシ ョ ン
FSLx
FSL イ ン タ ーフ ェ イ ス x
LSW(x)
x の最下位ワ ー ド
isDnz(x)
浮動小数点 : x が非正規化 さ れてい る場合に真
isInfinite(x)
浮動小数点 : x が +∞ ま たは -∞ の場合に真
isPosInfinite(x)
浮動小数点 : x が +∞ の場合に真
isNegInfinite(x)
浮動小数点 : x が -∞ の場合に真
isNaN(x)
浮動小数点 : x が quiet ま たは signalling NaN の場合に真
isZero(x)
浮動小数点 : x が +0 ま たは -0 の場合に真
isQuietNaN(x)
浮動小数点 : x が quiet NaN の場合に真
isSigNaN(x)
浮動小数点 : x が signaling NaN の場合に真
signZero(x)
浮動小数点 : x > 0 の場合は +0、 x < 0 の場合は -0 を返す
signInfinite(x)
浮動小数点 : x > 0 の場合は +∞、 x < 0 の場合は -∞ を返す
フ ォ ーマ ッ ト
MicroBlaze では、 タ イ プ A と タ イ プ B と い う 2 つの命令フ ォーマ ッ ト が使用 さ れます。
タ イプ A
タ イ プ A は、 レ ジ ス タ間の命令に使用 さ れます。 こ の タ イ プには、 opcode、 デス テ ィ ネーシ ョ ン レ
ジ ス タ 1 個、 ソ ース レ ジ ス タ 2 個が含まれます。
opcode
0
デス テ ィ ネーシ ョ ン
レジス タ
6
ソ ース レ ジ ス タ A
11
ソ ース レ ジ ス タ B
16
0
0
0
0
21
0
0
0
0
0
0
0
31
タ イプ B
タ イ プ B は、レ ジ ス タ と 即値間の命令に使用 さ れます。 こ の タ イ プには、opcode、デス テ ィ ネーシ ョ
ン レ ジ ス タ 1 個、 ソ ース レ ジ ス タ 1 個、 お よ び 16 ビ ッ ト の即値が含まれます。
opcode
0
122
デス テ ィ ネーシ ョ ン
レジス タ
6
ソ ース レ ジ ス タ A
11
即値
16
japan.xilinx.com
31
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
命令
こ のセ ク シ ョ ンでは、 MicroBlaze の命令について説明 し ます。 命令は、 アルフ ァ ベ ッ ト 順に掲載 さ
れてお り 、 各命令に対 し て簡略 コー ド 、 エン コー ド 、 説明、 命令セマ ン テ ィ ッ ク ス の擬似 コー ド 、 お
よ びその命令で変更 さ れ る レ ジ ス タ の一覧が示 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
123
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
add
0
0
0
Arithmetic Add
0
add
rD, rA, rB
加算
addc
rD, rA, rB
キ ャ リ ー付 き 加算
addk
rD, rA, rB
加算 ( キ ャ リ ーを保持)
addkc
rD, rA, rB
キ ャ リ ー付 き 加算 ( キ ャ リ ーを保持)
K C 0
rD
6
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
レ ジ ス タ rA と rB の内容の合計を レ ジ ス タ rD に格納 し ます。
addk に対し て は、 命令のビ ッ ト 3 (図で K と 表記) が 1 に設定さ れま す。 addc に対し て は、 命令
のビ ッ ト 4 (図で C と 表記) が 1 に設定さ れま す。 addkc に対し て は、 両方のビ ッ ト が 1 に設定さ
れま す。
ビ ッ ト 3 が 1 の場合 (addk、 addkc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値が
保持 さ れます。 ビ ッ ト 3 が 0 の場合 (add、 addc)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て変更
さ れます。
ビ ッ ト 4 が 1 の場合 (addc、addkc)、キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影響 し ます。
ビ ッ ト 4 が 0 の場合 (add、 addk)、 キ ャ リ ー フ ラ グの内容は命令の実行には影響 し ません (通常の
加算を実行)。
擬似 コ ー ド
if C = 0 then
(rD) ← (rA) + (rB)
else
(rD) ←(rA) + (rB) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
命令 opcode 内の C ビ ッ ト は、 MSR のキ ャ リ ー ビ ッ ト と は異な り ます。
「add r0, r0, r0」 (= 0x00000000) 命令は、 コ ンパ イ ラ で使用 さ れ る こ と はな く 、 通常は初期化 さ れ
ていない メ モ リ を示 し ます。 不正な命令の例外を使用 し てい る 場合、 MicroBlaze のパ ラ メ ー タ を
C_OPCODE_0x0_ILLEGAL=1 に設定する と 、 こ れ ら の命令を ト ラ ッ プで き ます。
124
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
addi
0
0
0
Arithmetic Add Immediate
1
addi
rD, rA, IMM
即値加算
addic
rD, rA, IMM
キ ャ リ ー付 き の即値加算
addik
rD, rA, IMM
即値加算 ( キ ャ リ ーを保持)
addikc
rD, rA, IMM
キ ャ リ ー付 き の即値加算 ( キ ャ リ ーを保持)
K C 0
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値の合計を、 レ ジ ス タ rD に
格納 し ます。 addik に対 し ては、 命令の ビ ッ ト 3 (図で K と 表記) が 1 に設定 さ れます。 addc に対 し
ては、 命令の ビ ッ ト 4 (図で C と 表記) が 1 に設定 さ れます。 addikc に対 し ては、 両方の ビ ッ ト が 1
に設定 さ れます。
ビ ッ ト 3 が 1 の場合 (addik、 addikc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値
が保持 さ れます。 ビ ッ ト 3 が 0 の場合 (addi、 addic)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て変
更 さ れます。
ビ ッ ト 4 が 1 の場合 (addic、 addikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影響 し ま
す。 ビ ッ ト 4 が 0 の場合 (addi、 addik)、 キ ャ リ ー フ ラ グの内容は命令の実行には影響 し ません (通
常の加算を実行)。
擬似 コ ー ド
if C = 0 then
(rD) ← (rA) + sext(IMM)
else
(rD) ←(rA) + sext(IMM) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
命令 opcode 内の C ビ ッ ト は、 MSR のキ ャ リ ー ビ ッ ト と は異な り ます。
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
125
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
and
Logical AND
and
1
0
0
0
0
0
1
rD, rA, rB
rD
6
rA
11
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を AND 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ∧ (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
126
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
andi
Logical AND with Immediate
andi
1
0
0
1
0
0
1
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を AND 演算 し 、 その結果
を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ∧ sext(IMM)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
127
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
andn
Logical AND NOT
andn
1
0
0
0
0
1
1
rD, rA, rB
rD
6
rA
11
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容の論理補数を AND 演算 し 、 その結果を レ ジ ス タ rD に格
納 し ます。
擬似 コ ー ド
(rD) ← (rA) ∧ (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
128
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
andni
Logical AND NOT with Immediate
andni
1
0
0
1
0
1
1
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値の論理補数を AND 演算
し 、 その結果を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ∧ (sext(IMM))
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
129
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
beq
1
0
0
Branch if Equal
0
1
1
beq
rA, rB
0 の場合に分岐
beqd
rA, rB
0 の場合に分岐 (遅延ス ロ ッ ト を使用)
1 D 0
0
6
0
0
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
rA が 0 の場合、 rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC +
rB の命令です。
beqd に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA = 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐が不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
130
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
beqi
1
0
0
Branch Immediate if Equal
1
1
1
beqi
rA, IMM
0 の場合に即値に分岐
beqid
rA, IMM
0 の場合に即値に分岐 (遅延ス ロ ッ ト を使用)
1 D 0
0
0
6
0
rA
11
IMM
16
31
説明
rA が 0 の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐先は、 ア ド レ ス PC
+ IMM の命令です。
beqid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA = 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐が不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
131
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bge
1
0
0
Branch if Greater or Equal
0
1
1
bge
rA, rB
0 以上の場合に分岐
bged
rA, rB
0 以上の場合に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
1
6
0
1
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
rA が 0 以上の場合、rB のオフ セ ッ ト 値に含め ら れてい る 命令に分岐 し ます。 分岐先は、ア ド レ ス PC
+ rB の命令です。
bged に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA >= 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐が不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
132
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
bgei
1
0
0
Branch Immediate if Greater or Equal
1
1
1
bgei
rA, IMM
0 以上の場合に即値に分岐
bgeid
rA, IMM
0 以上の場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
1
0
6
1
rA
11
IMM
16
31
説明
rA が 0 以上の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ
ス PC + IMM の命令です。
bgeid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA >= 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
133
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bgt
1
0
0
Branch if Greater Than
0
1
1
bgt
rA, rB
0 よ り 大き い場合に分岐
bgtd
rA, rB
0 よ り 大き い場合に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
1
6
0
0
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
rA が 0 よ り 大 き い場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド
レ ス PC + rB の命令です。
bgtd に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、分岐遅延ス ロ ッ ト を使用す る か
ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA > 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れてい る場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が設定 さ れていない場合)
メモ
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
134
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
bgti
1
0
0
Branch Immediate if Greater Than
1
1
1
bgti
rA, IMM
0 よ り 大き い場合に即値に分岐
bgtid
rA, IMM
0 よ り 大き い場合に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
1
0
6
0
rA
11
IMM
16
31
説明
rA が 0 よ り 大 き い場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア
ド レ ス PC + IMM の命令です。
bgtid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA > 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
135
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
ble
1
0
0
Branch if Less or Equal
0
1
1
ble
rA, rB
0 以下の場合に分岐
bled
rA, rB
0 以下の場合に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
0
6
1
1
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
rA が 0 以下の場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ ス
PC + rB の命令です。
bled に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か
ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA <= 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
136
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
blei
1
0
0
Branch Immediate if Less or Equal
1
1
1
blei
rA, IMM
0 以下の場合に即値に分岐
bleid
rA, IMM
0 以下の場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
0
1
6
1
rA
11
IMM
16
31
説明
rA が 0 以下の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ
ス PC + IMM の命令です。
bleid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA <= 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
137
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
blt
1
0
Branch if Less Than
0
0
1
1
blt
rA, rB
0 よ り 小 さ い場合に分岐
bltd
rA, rB
0 よ り 小 さ い場合に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
0
6
1
0
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
rA が 0 よ り 小 さ い場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド
レ ス PC + rB の命令です。
bltd に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る か
ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA < 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
138
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
blti
1
0
0
Branch Immediate if Less Than
1
1
1
blti
rA, IMM
0 よ り 小 さ い場合に即値に分岐
bltid
rA, IMM
0 よ り 小 さ い場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
0
1
6
0
rA
11
IMM
16
31
説明
rA が 0 未満の場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ
ス PC + IMM の命令です。
bltid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、分岐遅延ス ロ ッ ト を使用す る か
ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、 遅延ス ロ ッ ト が使用 さ れ、 分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA < 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
139
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bne
1
0
0
Branch if Not Equal
0
1
1
bne
rA, rB
0 でない場合に分岐
bned
rA, rB
0 でない場合に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
0
6
0
1
rA
11
rB
16
0
0
0
0
0
21
0
0
0
0
0
0
31
説明
rA が 0 ではない場合、 rB のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド レ
ス PC + rB の命令です。
bned に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA ≠ 0 then
PC ← PC + rB
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
140
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
bnei
1
0
0
Branch Immediate if Not Equal
1
1
1
bnei
rA, IMM
0 でない場合に即値に分岐
bneid
rA, IMM
0 でない場合に即値に分岐 (分岐遅延ス ロ ッ ト を使用)
1 D 0
0
0
6
1
rA
11
IMM
16
31
説明
rA が 0 ではない場合、 IMM のオ フ セ ッ ト 値に含め ら れてい る命令に分岐 し ます。 分岐先は、 ア ド
レ ス PC + IMM の命令です。
bneid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐遅延ス ロ ッ ト を使用す る
か ど う かを指定 し ます。 D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分岐後の命令 (分岐遅延ス
ロ ッ ト にあ る 命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き ます。 D ビ ッ ト が 0 の場
合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
If rA ≠ 0 then
PC ← PC + sext(IMM)
else
PC ← PC + 4
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
1 ク ロ ッ ク サ イ ク ル (分岐不成立の場合)
2 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (分岐が成立 し 、 D ビ ッ ト が 0 の場合)
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
141
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
br
1
0
Unconditional Branch
0
0
1
1
br
rB
分岐
bra
rB
絶対値に分岐
brd
rB
分岐 (分岐遅延ス ロ ッ ト を使用)
brad
rB
絶対値に分岐 (分岐遅延ス ロ ッ ト を使用)
brld
rD, rB
分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用)
brald
rD, rB
絶対値に分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用)
0
rD
6
D A L
11
0
0
rB
16
0
0
0
0
0
0
0
0
0
21
0
0
31
説明
rB で指定 さ れた ア ド レ ス に含まれ る命令に分岐 し ます。
brld お よ び brald に対 し ては、L ビ ッ ト が 1 に設定 さ れます。 L ビ ッ ト が 1 の場合、 リ ン ク が実行 さ
れ、 PC の現在の値が rD に格納 さ れます。
bra、 brad、 お よ び brald に対 し ては、 A ビ ッ ト が 1 に設定 さ れます。 A ビ ッ ト が 1 の場合は、 rB の
値を絶対値 と みな し 、 その値に分岐 し ます。 A ビ ッ ト が 0 の場合は、 相対分岐 と な り 、 分岐先は PC
+ rB と な り ます。
bra、 brad、 brld、 お よ び brald に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分岐
遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、分
岐後の命令 (分岐遅延ス ロ ッ ト にあ る命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで き
ます。
D ビ ッ ト が 0 の場合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
擬似 コ ー ド
if L = 1 then
(rD) ← PC
if A = 1 then
PC ← (rB)
else
PC ← PC + (rB)
if D = 1 then
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
rD
•
PC
レ イテンシ
2 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 0 の場合)
142
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
メモ
命令 brl お よ び bral は、 使用で き ません。 遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き
ません。 割 り 込みお よ び外部ハー ド ウ ェ ア ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ
れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
143
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bri
1
0
Unconditional Branch Immediate
0
1
1
1
0
bri
IMM
即値に分岐
brai
IMM
即値の絶対値に分岐
brid
IMM
即値に分岐 (分岐遅延ス ロ ッ ト を使用)
braid
IMM
即値の絶対値に分岐 (分岐遅延ス ロ ッ ト を使用)
brlid
rD, IMM
即値に分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用)
bralid
rD, IMM
即値の絶対値に分岐お よ び リ ン ク (分岐遅延ス ロ ッ ト を使用)
rD
6
D A
11
L
0
0
IMM
16
31
説明
32 ビ ッ ト に符号拡張 さ れた IMM で指定 さ れ る ア ド レ ス に含まれてい る命令に分岐 し ます。
brlid お よ び bralid に対 し ては、 L ビ ッ ト が 1 に設定 さ れます。 L ビ ッ ト が 1 の場合、 リ ン ク が実行
さ れ、 PC の現在の値が rD に格納 さ れます。
brai、braid、お よ び bralid に対 し ては、A ビ ッ ト が 1 に設定 さ れます。 A ビ ッ ト が 1 の場合は、IMM
の値を絶対値 と みな し 、 その値に分岐 し ます。 A ビ ッ ト が 0 の場合は、 相対分岐 と な り 、 分岐先は
PC + IMM と な り ます。
brid、 braid、 brlid、 お よ び bralid に対 し ては、 D ビ ッ ト が 1 に設定 さ れます。 こ の D ビ ッ ト は、 分
岐遅延ス ロ ッ ト を使用す る か ど う かを指定 し ます。D ビ ッ ト が 1 の場合、遅延ス ロ ッ ト が使用 さ れ、
分岐後の命令 (分岐遅延ス ロ ッ ト にあ る命令) を分岐先の命令を実行す る前に完了 さ せ る こ と がで
き ます。 D ビ ッ ト が 0 の場合、 遅延ス ロ ッ ト は使用 さ れず、 分岐後に分岐先の命令が実行 さ れます。
MicroBlaze で MMU が使用 さ れ (C_USE_MMU >= 1) 、 brki rD, 0x18 を使用 し てユーザー ベ
ク タ 例外が処理 さ れ る 場合は、MSR のユーザー モー ド ビ ッ ト お よ び仮想モー ド ビ ッ ト が 0 にな り
ます。
擬似 コ ー ド
if L = 1 then
(rD) ← PC
if A = 1 then
PC ← sext(IMM)
else
PC ← PC + sext(IMM)
if D = 1 then
allow following instruction to complete execution
if D = 1 and A = 1 and L = 1 and IMM = 0x8 then
MSR[UMS] ←MSR[UM]
MSR[VMS] ←MSR[VM]
MSR[UM] ←0
MSR[VM] ←0
144
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
変更 さ れる レ ジ ス タ
•
rD
•
PC
•
MSR[UM]、 MSR[VM]
レ イテンシ
2 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 1 の場合)
3 ク ロ ッ ク サ イ ク ル (D ビ ッ ト が 0 の場合)
メモ
命令 brli お よび brali は、 使用で き ません。
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
145
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
brk
Break
brk
1
0
0
0
1
1
0
rD, rB
rD
6
0
1
1
0
11
0
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
rB のア ド レ ス値に格納 さ れ る命令に分岐、 リ ン ク し ます。 PC の現在の値が rD に格納 さ れます。
MSR の BIP フ ラ グが 1 にな り 、 予約ビ ッ ト は ク リ アにな り ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] == 1 then
ESR[EC] ← 00111
else
(rD) ← PC
PC ← (rB)
MSR[BIP] ← 1
Reservation ←0
変更 さ れる レ ジ ス タ
•
rD
•
PC
•
MSR[BIP]
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
3 ク ロ ッ ク サイ クル
146
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
brki
Break Immediate
brki
1
0
0
1
1
1
0
rD
6
rD, IMM
0
11
1
1
0
0
IMM
16
31
説明
32 ビ ッ ト に符号拡張 さ れた IMM のア ド レ ス値に格納 さ れてい る命令に分岐、リ ン ク し ます。 PC の
現在の値が rD に格納 さ れます。 MSR の BIP フ ラ グが 1 に設定 さ れ、予約ビ ッ ト が ク リ アにな り ま
す。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1)、brki rD, 0x8 ま たは brki rD,
0x18 を使用 し て ソ フ ト ウ ェ ア ブ レー ク が実行 さ れ る 場合を除いて こ の命令は特権命令にな り 、
ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
MicroBlaze で MMU が使用 さ れ (C_USE_MMU >= 1) 、 bralid rD, 0x8 を使用 し てユーザー ベ
ク タ 例外が処理 さ れ る 場合は、MSR のユーザー モー ド ビ ッ ト お よ び仮想モー ド ビ ッ ト が 0 にな り
ます。
擬似 コ ー ド
if MSR[UM] = 1 and IMM ≠ 0x8 and IMM ≠ 0x18 then
ESR[EC] ← 00111
else
(rD) ← PC
PC ← sext(IMM)
MSR[BIP] ←1
Reservation ←0
if IMM = 0x8 or IMM = 0x18 then
MSR[UMS] ←MSR[UM]
MSR[VMS] ←MSR[VM]
MSR[UM] ←0
MSR[VM] ←0
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
PC
•
MSR[BIP]、 MSR[UM]、 MSR[VM]
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
3 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
147
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
bs
0
0
Barrel Shift
1
0
0
0
bsrl
rD, rA, rB
論理バレ ル シ フ ト ラ イ ト
bsra
rD, rA, rB
算術バレ ル シ フ ト ラ イ ト
bsll
rD, rA, rB
論理バレ ル シ フ ト レ フ ト
1
rD
6
rA
11
rB
16
S T
21
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rB で指定 さ れた分だけ レ ジ ス タ rA の内容を シ フ ト し 、 その結果を レ ジ ス タ rD に格納 し
ます。
bsll に対 し ては、 S ビ ッ ト (サ イ ド ビ ッ ト ) が 1 に設定 さ れます。 S ビ ッ ト が 1 の場合は、 左側への
シ フ ト が実行 さ れます。 bsrl お よ び bsra に対 し ては S ビ ッ ト は 0 に設定 さ れ、右側へのシ フ ト が実
行 さ れます。
bsra に対し て は、 T ビ ッ ト (タ イ プ ビ ッ ト ) が 1 に設定さ れま す。 T ビ ッ ト が 1 の場合、 算術シ フ
ト が実行さ れま す。 bsrl およ び bsll に対し て は T ビ ッ ト は 0 に設定さ れ、論理シ フ ト が実行さ れま
す。
擬似 コ ー ド
if S = 1 then
(rD) ← (rA) << (rB)[27:31]
else
if T = 1 then
if ((rB)[27:31]) ≠ 0 then
(rD)[0:(rB)[27:31]-1] ← (rA)[0]
(rD)[(rB)[27:31]:31] ← (rA) >> (rB)[27:31]
else
(rD) ← (rA)
else
(rD) ← (rA) >> (rB)[27:31]
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
こ れ ら の命令は、 オプシ ョ ンです。 MicroBlaze でパ ラ メ ー タ C_USE_BARREL が 1 に設定 さ れて
い る 場合にのみ使用可能です。
148
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
bsi
0
0
1
Barrel Shift Immediate
1
0
0
bsrli
rD, rA, IMM
論理バレ ル シ フ ト ラ イ ト (即値を使用)
bsrai
rD, rA, IMM
算術バレ ル シ フ ト ラ イ ト (即値を使用)
bslli
rD, rA, IMM
論理バレ ル シ フ ト レ フ ト (即値を使用)
1
rD
6
rA
11
0
0
0
0
0
16
S T
21
0
0
0
0
IMM
27
31
説明
IMM で指定 さ れた分だけ レ ジ ス タ rA の内容を シ フ ト し 、 その結果を レ ジ ス タ rD に格納 し ます。
bslli に対 し ては、 S ビ ッ ト (サ イ ド ビ ッ ト ) が 1 に設定 さ れます。 S ビ ッ ト が 1 の場合は、 左側への
シ フ ト が実行 さ れます。 bsrli お よ び bsrai に対 し ては S ビ ッ ト は 0 に設定 さ れ、 右側へのシ フ ト が
実行 さ れます。
bsrai に対 し ては、 T ビ ッ ト ( タ イ プ ビ ッ ト ) が 1 に設定 さ れます。 T ビ ッ ト が 1 の場合、 算術シ フ
ト が実行 さ れます。 bsrli お よ び bslli に対 し ては T ビ ッ ト は 0 に設定 さ れ、論理シ フ ト が実行 さ れま
す。
擬似 コ ー ド
if S = 1 then
(rD) ← (rA) << IMM
else
if T = 1 then
if IMM ≠ 0 then
(rD)[0:IMM-1] ← (rA)[0]
(rD)[IMM:31] ← (rA) >> IMM
else
(rD) ← (rA)
else
(rD) ← (rA) >> IMM
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
こ れ ら は、 タ イ プ B 命令ではあ り ません。 こ れ ら の命令の前に imm 命令を実行 し て も 、影響はあ り
ません。
こ れ ら の命令は、 オプシ ョ ンです。 MicroBlaze でパ ラ メ ー タ C_USE_BARREL が 1 に設定 さ れて
い る 場合にのみ使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
149
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
cmp
0
0
0
Integer Compare
0
1
0
cmp
rD, rA, rB
rB を rA と 比較 (符号付 き )
cmpu
rD, rA, rB
rB を rA と 比較 (符号な し )
1
rD
6
rA
rB
11
16
0
0
0
0
0
0
0
0
0 U 1
21
31
説明
レ ジ ス タ rB の内容か ら レ ジ ス タ rA の内容を減算 し 、 その結果を レ ジ ス タ rD に格納 し ます。
rD の MSB ビ ッ ト は、 rA と rB の関係が真であ る か ど う かを示す よ う 調整 さ れます。 U ビ ッ ト が 1
の場合、 rA と rB は符号な し の値 と みな さ れます。 U ビ ッ ト が 0 の場合、 rA と rB は符号付 き の値
と みな さ れます。
擬似 コ ー ド
(rD) ← (rB) + (rA) + 1
(rD)(MSB) ←(rA) > (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
150
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
fadd
Floating Point Arithmetic Add
fadd
0
0
1
0
1
1
0
rD, rA, rB
rD
6
加算
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA と rB の浮動小数点値の合計を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
if isDnz(rA) or isDnz(rB) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else if isSigNaN(rA) or isSigNaN(rB)or
(isPosInfinite(rA) and isNegInfinite(rB)) or
(isNegInfinite(rA) and isPosInfinite(rB))) then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isQuietNaN(rA) or isQuietNaN(rB) then
(rD) ← 0xFFC00000
else if isDnz((rA)+(rB)) then
(rD) ← signZero((rA)+(rB))
FSR[UF] ← 1
ESR[EC] ← 00110
else if isNaN((rA)+(rB)) and then
(rD) ← signInfinite((rA)+(rB))
FSR[OF] ← 1
ESR[EC] ← 00110
else
(rD) ←(rA) + (rB)
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP 例外が発生 し た場合)
•
FSR[IO,UF,OF,DO]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る 場合にの
み使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
151
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
frsub
Reverse Floating Point Arithmetic Subtraction
frsub
0
0
1
0
1
1
0
rD, rA, rB
rD
6
逆減算
rA
11
rB
16
0
0
0
1
21
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rB の浮動小数点値か ら レ ジ ス タ rA の浮動小数点値を減算 し 、 その結果を レ ジ ス タ rD に
格納 し ます。
擬似 コ ー ド
if isDnz(rA) or isDnz(rB) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else if (isSigNaN(rA) or isSigNaN(rB) or
(isPosInfinite(rA) and isPosInfinite(rB)) or
(isNegInfinite(rA) and isNegInfinite(rB))) then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isQuietNaN(rA) or isQuietNaN(rB) then
(rD) ← 0xFFC00000
else if isDnz((rB)-(rA)) then
(rD) ← signZero((rB)-(rA))
FSR[UF] ← 1
ESR[EC] ← 00110
else if isNaN((rB)-(rA)) then
(rD) ← signInfinite((rB)-(rA))
FSR[OF] ← 1
ESR[EC] ← 00110
else
(rD) ←(rB) - (rA)
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP 例外が発生 し た場合)
•
FSR[IO,UF,OF,DO]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る 場合にの
み使用可能です。
152
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
fmul
Floating Point Arithmetic Multiplication
fmul
0
0
1
0
1
1
0
rD, rA, rB
rD
6
乗算
rA
11
rB
16
0
21
0
1
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の浮動小数点値 と レ ジ ス タ rB の浮動小数点値を乗算 し 、その結果を レ ジ ス タ rD に格
納 し ます。
擬似 コ ー ド
if isDnz(rA) or isDnz(rB) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else
if isSigNaN(rA) or isSigNaN(rB) or (isZero(rA) and isInfinite(rB)) or
(isZero(rB) and isInfinite(rA)) then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isQuietNaN(rA) or isQuietNaN(rB) then
(rD) ← 0xFFC00000
else if isDnz((rB)*(rA)) then
(rD) ← signZero((rA)*(rB))
FSR[UF] ← 1
ESR[EC] ← 00110
else if isNaN((rB)*(rA)) then
(rD) ← signInfinite((rB)*(rA))
FSR[OF] ← 1
ESR[EC] ← 00110
else
(rD) ←(rB) * (rA)
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP 例外が発生 し た場合)
•
FSR[IO,UF,OF,DO]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る 場合にの
み使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
153
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
fdiv
Floating Point Arithmetic Division
fdiv
0
0
1
0
1
1
0
rD, rA, rB
rD
6
除算
rA
rB
11
16
0
0
1
1
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rB の浮動小数点値を レ ジ ス タ rA の浮動小数点値で除算 し 、 その結果を レ ジ ス タ rD に格
納 し ます。
擬似 コ ー ド
if isDnz(rA) or isDnz(rB) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else
if isSigNaN(rA) or isSigNaN(rB) or (isZero(rA) and isZero(rB)) or
(isInfinite(rA) and isInfinite(rB)) then
(rD) ← 0xFFC00000
FSR[IO] ←1
ESR[EC] ← 00110
else if isQuietNaN(rA) or isQuietNaN(rB) then
(rD) ← 0xFFC00000
else if isZero(rA) and not isInfinite(rB) then
(rD) ← signInfinite((rB)/(rA))
FSR[DZ] ← 1
ESR[EC] ← 00110
else if isDnz((rB)/(rA)) then
(rD) ← signZero((rB)/(rA))
FSR[UF] ← 1
ESR[EC] ← 00110
else if isNaN((rB)/(rA)) then
(rD) ← signInfinite((rB)/(rA))
FSR[OF] ← 1
ESR[EC] ← 00110
else
(rD) ←(rB) / (rA)
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP 例外が発生 し た場合)
•
FSR[IO,UF,OF,DO,DZ]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 28 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 30 ク ロ ッ ク サ イ ク ル
154
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
メモ
こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る場合にの
み使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
155
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
fcmp
0
0
1
Floating Point Number Comparison
0
1
1
fcmp.un
rD, rA, rB
順序付けな し 浮動小数点比較
fcmp.lt
rD, rA, rB
浮動小数点の小な り 比較
fcmp.eq
rD, rA, rB
浮動小数点の等価比較
fcmp.le
rD, rA, rB
浮動小数点の以下比較
fcmp.gt
rD, rA, rB
浮動小数点の大な り 比較
fcmp.ne
rD, rA, rB
浮動小数点の非等価比較
fcmp.ge
rD, rA, rB
浮動小数点の以上比較
0
rD
6
rA
11
rB
16
0
21
1
0
0
OpSel
25
0
28
0
0
0
31
説明
レ ジ ス タ rB の浮動小数点値を レ ジ ス タ rA の浮動小数点値 と 比較 し 、 その結果を レ ジ ス タ rD に格
納 し ます。 命令 コ ー ド の OpSel フ ィ ール ド で、 実行す る比較 タ イ プ を指定 し ます。
擬似 コ ー ド
if isDnz(rA) or isDnz(rB) then
(rD) ← 0
FSR[DO] ← 1
ESR[EC] ← 00110
else
{ 表 4-2 の演算を参照 }
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP 例外が発生 し た場合)
•
FSR[IO,DO]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る場合にの
み使用可能です。
157 ページの表 4-2 に、 浮動小数点比較演算を示 し ます。
156
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
表 4-2 : 浮動小数点の比較演算
比較 タ イ プ
説明
順序付けな し
オペ ラ ン ド の関係
OpSel
000
(rB) > (rA)
(rD) ←0
(rB) < (rA)
(rD) ←0
(rB) = (rA)
(rD) ←0
isSigNaN(rA)
または isSigNaN(rB)
(rD) ←1
isQuietNaN(rA)
または
isQuietNaN(rB)
(rD) ←1
FSR[IO] ←1
ESR[EC] ←00110
小な り
等価
001
010
(rD) ←0
(rD) ←0
(rD) ←1
(rD) ←0
(rD) ←0
(rD) ←1
(rD) ←0
(rD) ←0
FSR[IO] ←1
FSR[IO] ←1
ESR[EC] ←00110
ESR[EC] ←00110
(rD) ←0
(rD) ←0
FSR[IO] ←1
ESR[EC] ←0011
以下
大な り
非等価
011
100
101
(rD) ←0
(rD) ←1
(rD) ←1
(rD) ←1
(rD) ←0
(rD) ←1
(rD) ←1
(rD) ←0
(rD) ←0
(rD) ←0
(rD) ←0
FSR[IO] ←1
FSR[IO] ←1
ESR[EC] ←00110
ESR[EC] ←00110
(rD) ←0
(rD) ←0
FSR[IO] ←1
FSR[IO] ←1
ESR[EC] ←00110
ESR[EC] ←00110
(rD) ←1
(rD) ←1
FSR[IO] ←1
ESR[EC] ←0011
以上
110
(rD) ←1
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
(rD) ←0
(rD) ←1
japan.xilinx.com
(rD) ←0
(rD) ←0
FSR[IO] ←1
FSR[IO] ←1
ESR[EC] ←00110
ESR[EC] ←00110
157
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
flt
Floating Point Convert Integer to Float
flt
0
0
1
0
1
1
0
rD, rA
rD
6
rA
11
0
16
0
21
1
0
1
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の符号付 き整数を浮動小数点値に変換 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ れ
は 32 ビ ッ ト の符号付 き繰 り 上げ/繰 り 下げ変換で、 結果は 32 ビ ッ ト の浮動小数点値にな り ます。
擬似 コ ー ド
(rD) ← float ((rA))
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 4 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 6 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、MicroBlaze でパラ メ ータ C_USE_FPU が 2 に設定さ れて いる 場合にのみ使用可能で
す。
158
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
fint
Floating Point Convert Float to Integer
fint
0
0
1
0
1
1
0
rD, rA
rD
6
rA
0
11
16
0
1
1
0
0
0
21
0
0
0
0
0
31
説明
レ ジ ス タ rA の浮動小数点値を符号付 き整数に変換 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ れ
は 32 ビ ッ ト の符号付 き変換で、 結果は 32 ビ ッ ト の整数値にな り ます。
擬似 コ ー ド
if isDnz(rA) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else if isNaN(rA) then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isInf(rA) or (rA) < -231 or (rA) > 231 - 1 then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else
(rD) ← int ((rA))
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP が発生 し た場合)
•
FSR[IO,UF,OF,DO]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 5 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 7 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、MicroBlaze でパラ メ ータ C_USE_FPU が 2 に設定さ れて いる 場合にのみ使用可能で
す。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
159
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
fsqrt
Floating Point Arithmetic Square Root
fsqrt
0
0
1
0
1
1
0
rD, rA
rD
6
平方根
rA
0
11
16
0
1
1
1
0
0
0
21
0
0
0
0
31
説明
rA の値の浮動小数点平方根演算を実行 し 、 その結果を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
if isDnz(rA) then
(rD) ← 0xFFC00000
FSR[DO] ← 1
ESR[EC] ← 00110
else if isSigNaN(rA) then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if isQuietNaN(rA) then
(rD) ← 0xFFC00000
else if (rA) < 0 then
(rD) ← 0xFFC00000
FSR[IO] ← 1
ESR[EC] ← 00110
else if (rA) = -0 then
(rD) ← -0
else
(rD) ← sqrt ((rA))
変更 さ れる レ ジ ス タ
•
rD (FP 例外が発生 し た場合は変更な し )
•
ESR[EC] (FP が発生 し た場合)
•
FSR[IO,UF,OF,DO]
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 27 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 29 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、MicroBlaze でパラ メ ータ C_USE_FPU が 2 に設定さ れて いる 場合にのみ使用可能で
す。
160
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
get
0
0
1
get from fsl interface
1
0
1
1
tneaget
rD, FSLx
FSL x か ら デー タ を読み出 し
t : テ ス ト のみ
n : ノ ンブ ロ ッ キ ン グ
e : 制御ビ ッ ト が 1 の場合例外
a : 不可分
tnecaget
rD, FSLx
FSL x か ら 制御を読み出 し
t : テ ス ト のみ
n : ノ ンブ ロ ッ キ ン グ
e : 制御ビ ッ ト が 0 の場合例外
a : 不可分
rD
6
0
0
0
0
11
0
0
n
c
t
a
e
0
0
0
16
0
0
0
FSLx
28
31
説明
FSLx イ ン タ ーフ ェ イ ス か ら 読み出 し た値を レ ジ ス タ rD に格納 し ます。
get 命令には、 32 種類あ り ます。
ブ ロ ッ キ ン グの get 命令 (n ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ ス か ら 有効なデー タ が取得 さ れ
る ま での間 MicroBlaze を ス ト ール し ます。 ノ ンブ ロ ッ キ ン グの get 命令では MicroBlaze は ス ト ー
ル さ れず、 デー タ が有効な場合はキ ャ リ ーが 0 に、 無効の場合は 1 にな り ます。 ア ク セ ス が無効な
場合は、 デス テ ィ ネーシ ョ ン レ ジ ス タ の内容は定義 さ れません。
すべてのデー タ get 命令 (c ビ ッ ト が 0) では、 FSL イ ン ターフ ェ イ ス の制御ビ ッ ト が 0 であ る こ と
が想定 さ れます。 0 ではない場合は、MSR[FSL_Error] が 1 に設定 さ れます。 すべての制御 get 命令
(c ビ ッ ト が 1) では、FSL イ ン タ ーフ ェ イ ス の制御ビ ッ ト が 1 であ る こ と が想定 さ れます。1 でない
場合は、 MSR[FSL_Error] が 1 に設定 さ れます。
例外の get 命令 (e ビ ッ ト が 1) では、制御ビ ッ ト の不一致があ る場合に例外が生成 さ れます。 こ の場
合、 ESR で EC に例外の原因が、 ESS に FSL イ ンデ ッ ク ス が設定 さ れます。 例外が発生 し た場合、
タ ーゲ ッ ト レ ジ ス タ rD はア ッ プデー ト さ れず、 FSL デー タ が EDR に格納 さ れます。
テ ス ト の get 命令 (t ビ ッ ト が 1) は、FSL リ ン ク への読み出 し 信号がアサー ト さ れない点を除 き、通
常どお り 処理 さ れます。
不可分の get 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ化
さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、
ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
161
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
(rD) ← FSLx
if (n = 1) then
MSR[Carry] ← not (FSLx Exists bit)
if (FSLx Control bit ≠ c) and (FSLx Exists bit) then
MSR[FSL_Error] ←1
if (e = 1) then
ESR[EC] ←00000
ESR[ESS] ←instruction bits [28:31]
EDR
←FSLx
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[FSL_Error]
•
MSR[Carry]
•
ESR[EC] (FSL 例外ま たは特権命令例外が発生 し た場合)
•
ESR[ESS] (FSL 例外が発生 し た場合)
•
EDR (FSL 例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
ブ ロ ッ キ ン グの get 命令では、命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール し
ます。 割 り 込みは、 パ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れ、 命令が不可分
でない場合に実行 さ れます。
メモ
アセ ンブ リ 言語で FSLx イ ン タ ーフ ェ イ ス を参照す る には、 rfsl0, rfsl1, ... rfsl15 を使用 し ます。
ブ ロ ッ キ ン グの get 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、 パ ラ メ ー タ
C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合は、 こ の命令を遅延ス ロ ッ ト に含め
る こ と がで き ません。
ノ ンブ ロ ッ キ ン グの get 命令では、 rsubc 命令を使用 し て、 イ ンデ ッ ク ス変数をデ ク リ メ ン ト で き ま
す。
C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合を除 き 、 e ビ ッ ト の設定は影響 し ません。
こ れ ら の命令は、 MicroBlaze でパ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れてい る 場
合にのみ使用可能です。
拡張命令 (例外、 テ ス ト 、 お よ び不可分の get 命令) は、 パ ラ メ ー タ C_USE_EXTENDED_FSL_
INSTR が 1 に設定 さ れてい る場合にのみ使用可能です。
162
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
getd
0
0
1
get from fsl interface dynamic
0
0
1
1
tneagetd
rD, rB
FSL rB[28:31] か ら デー タ を読み出 し
t : テ ス ト のみ
n : ノ ンブ ロ ッ キ ン グ
e : 制御ビ ッ ト が 1 の場合例外
a : 不可分
tnecagetd
rD, rB
FSL rB[28:31] か ら 制御を読み出 し
t : テ ス ト のみ
n : ノ ンブ ロ ッ キ ン グ
e : 制御ビ ッ ト が 0 の場合例外
a : 不可分
rD
6
0
0
0
0
0
11
rB
16
0
21
n
c
t
a
e
0
0
0
0
0
31
説明
rB の下位 4 ビ ッ ト で定義 さ れた FSL イ ン タ ーフ ェ イ ス か ら 読み出 し た結果が、レ ジ ス タ rD に格納
さ れます。
getd 命令には、 32 種類あ り ます。
ブ ロ ッ キ ン グ デー タ の getd 命令 (n ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ ス か ら 有効なデー タ が
取得 さ れ る ま での間 MicroBlaze を ス ト ール し ます。 ノ ンブ ロ ッ キ ン グ デー タ の getd 命令では
MicroBlaze は ス ト ール さ れず、デー タ が有効な場合はキ ャ リ ーが 0 に、無効の場合は 1 にな り ます。
ア ク セ ス が無効な場合は、 デス テ ィ ネーシ ョ ン レ ジ ス タ の内容は定義 さ れません。
すべてのデー タ getd 命令 (c ビ ッ ト が 0) では、FSL イ ン タ ーフ ェ イ ス の制御ビ ッ ト が 0 であ る こ と
が想定 さ れます。 0 ではない場合は、 MSR[FSL_Error] が 1 に設定 さ れます。 すべての制御 getd 命
令 (c ビ ッ ト が 1) では、 FSL イ ン ターフ ェ イ ス の制御ビ ッ ト が 1 であ る こ と が想定 さ れます。 1 で
ない場合は、 MSR[FSL_Error] が 1 に設定 さ れます。
例外の getd 命令 (e ビ ッ ト が 1) では、 制御ビ ッ ト の不一致があ る場合に例外が生成 さ れます。 こ の
場合、ESR で EC に例外の原因が、ESS に FSL イ ンデ ッ ク ス が設定 さ れます。 例外が発生 し た場合、
タ ーゲ ッ ト レ ジ ス タ rD はア ッ プデー ト さ れず、 FSL デー タ が EDR に格納 さ れます。
テ ス ト の getd 命令 (t ビ ッ ト が 1) は、FSL リ ン ク への読み出 し 信号がアサー ト さ れない点を除 き、通
常どお り 処理 さ れます。
不可分の getd 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ
化 さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、
ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
163
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
(rD) ← (FSL rB[28:31])
if (n = 1) then
MSR[Carry] ← not (FSL rB[28:31] Exists bit)
if (FSL rB[28:31] Control bit ≠ c) and (FSL rB[28:31] Exists bit) then
MSR[FSL_Error] ←1
if (e = 1) then
ESR[EC] ←00000
ESR[ESS] ←rB[28:31]
EDR
←(FSL rB[28:31])
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[FSL_Error]
•
MSR[Carry]
•
ESR[EC] (FSL 例外ま たは特権命令例外が発生 し た場合)
•
ESR[ESS] (FSL 例外が発生 し た場合)
•
EDR (FSL 例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
ブ ロ ッ キ ン グの getd 命令では、 命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール
し ます。 割 り 込みは、 命令が不可分 (割 り 込み不可) ではない場合に実行 さ れます。
メモ
ブ ロ ッ キ ン グの getd 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、こ の命令を遅
延ス ロ ッ ト に含め る こ と がで き ません。
ノ ンブ ロ ッ キ ン グの getd 命令では、 rsubc 命令を使用 し て、 イ ンデ ッ ク ス変数をデ ク リ メ ン ト で き
ます。
C_FSL_EXCEPTION が 1 に設定 さ れてい る 場合を除 き 、 e ビ ッ ト の設定は影響 し ません。
こ れ ら の命令は、 パ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れ、 パ ラ メ ー タ C_USE_
EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。
164
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
idiv
0
0
1
Integer Divide
0
0
1
idiv
rD, rA, rB
rB を rA で除算(符号付 き )
idivu
rD, rA, rB
rB を rA で除算 (符号な し )
0
rD
6
rA
rB
11
16
0
0
0
0
0
0
0
0
0 U 0
21
31
説明
レ ジ ス タ rB の内容を レ ジ ス タ rA の内容で除算 し 、 その結果を レ ジ ス タ rD に格納 し ます。
U ビ ッ ト が 1 の場合、 rA と rB は符号な し の値 と みな さ れます。 U ビ ッ ト が 0 の場合、 rA と rB は
符号付 き の値 と みな さ れます。
rA の値が 0 の場合、 例外が発生 し ない限 り 、 MSR の DZO ビ ッ ト が 1 にな り 、 rD の値は 0 にな り
ます。
U ビ ッ ト が ク リ アの場合、 rA の値は -1、 rB の値は -2147483648 の場合、 MSR の DZO ビ ッ ト は
セ ッ ト さ れ rD の値は、 例外が生成 さ れない限 り 、 -2147483648 にな り ます。
擬似 コ ー ド
if (rA) = 0 then
(rD)
<- 0
MSR[DZO] <- 1
ESR[EC] <- 00101
ESR[DEC] <- 0
else if U = 0 and (rA) = -1 and (rB) = -2147483648 then
(rD)
<- -2147483648
MSR[DZO] <- 1
ESR[EC] <- 00101
ESR[DEC] <- 1
else
(rD) ←(rB) / (rA)
変更 さ れる レ ジ ス タ
•
rD (除算例外が発生 し た場合は変更な し )
•
MSR[DZO] (rA の値が 0 の場合)
•
ESR[EC] (rA の値が 0 の場合)
レ イテンシ
(rA) = 0 の場合 1 ク ロ ッ ク サ イ ク ル、それ以外は C_AREA_OPTIMIZED=0 の場合 32 ク ロ ッ ク サ
イ クル
(rA) = 0 の場合 1 ク ロ ッ ク サ イ ク ル、それ以外は C_AREA_OPTIMIZED=1 の場合 34 ク ロ ッ ク サ
イ クル
メモ
こ の命令は、MicroBlaze でパラ メ ータ C_USE_DIV が 1 に設定さ れて いる 場合にのみ使用可能で
す。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
165
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
imm
Immediate
imm
1
0
0
1
1
0
0
0
0
0
6
IMM
0
0
0
0
0
0
11
0
IMM
16
31
説明
imm 命令は、 IMM の値を一時レ ジ ス タ に読み込み、次の命令で 32 ビ ッ ト の即値を形成で き る よ う
に、 こ の値を ロ ッ ク し ます。
imm 命令は、 タ イ プ B 命令 と 共に使用 し ます。 タ イ プ B 命令では 16 ビ ッ ト の即値フ ィ ール ド し か
ないため、 32 ビ ッ ト の即値は直接使用で き ませんが、 MicroBlaze では 32 ビ ッ ト の即値を使用で き
ます。 デフ ォル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32
ビ ッ ト に符号拡張 し て、即値オペ ラ ン ド と し て使用 し ます。タ イ プ B 命令の前に imm 命令を使用す
る と 、 32 ビ ッ ト の即値を使用で き ます。 imm 命令は、 16 ビ ッ ト の IMM 値を次の命令で使用で き
る よ う 一時的に ロ ッ ク し ます。 こ の imm 命令の直後に タ イ プ B 命令を実行す る と 、 こ の imm 命令
の 16 ビ ッ ト の IMM 値 (上位 16 ビ ッ ト ) と タ イ プ B 命令の 16 ビ ッ ト の IMM 値 (下位 16 ビ ッ ト )
か ら 32 ビ ッ ト の即値が形成 さ れます。 imm 命令の後に タ イ プ B 命令が実行 さ れない場合は、 ロ ッ
ク さ れた値は解除 さ れます。
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
imm 命令お よ び後続の タ イ プ B 命令は不可分のため、こ の 2 つの命令の間にほかの命令を割 り 込ま
せ る こ と はで き ません。
ザ イ リ ン ク ス で提供す る アセンブ ラ では、 imm 命令が必要であ る こ と が自動的に検出 さ れます。
32 ビ ッ ト の IMM 値が タ イ プ B 命令で指定 さ れてい る場合、 アセンブ ラ で IMM 値が 16 ビ ッ ト の
値に変換 さ れ、 実行フ ァ イ ルでその命令の前に imm 命令が挿入 さ れます。
166
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
lbu
Load Byte Unsigned
lbu
1
0
1
0
0
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rA と rB を加算 し た結果の メ モ リ ロ ケーシ ョ ンか ら 1 バ イ ト (8 ビ ッ ト ) 読み込みます。
デー タ はレ ジ ス タ rD の最下位バ イ ト に格納 さ れ、 その他の 3 バ イ ト は ク リ ア さ れます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ
は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else
(rD)[24:31] ← Mem(Addr)
(rD)[0:23] ← 0
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が発生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
167
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lbui
Load Byte Unsigned Immediate
lbui
1
0
1
1
0
0
0
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM 値を加算 し た結果の メ モ リ ロ ケーシ ョ ン
か ら 1 バ イ ト (8 ビ ッ ト ) 読み込みます。 デー タ は レ ジ ス タ rD の最下位バ イ ト に格納 さ れ、 その他
の 3 バ イ ト は ク リ ア さ れます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ
は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else
(rD)[24:31] ← Mem(Addr)
(rD)[0:23] ← 0
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が発生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
168
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
lhu
Load Halfword Unsigned
lhu
1
0
1
0
0
0
1
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rA と rB を加算 し た結果を、ハーフ ワー ド で揃え た メ モ リ ロ ケーシ ョ ンか ら 1 ハーフ ワ ー
ド (16 ビ ッ ト ) 読み込みます。 デー タ はレ ジ ス タ rD の下位ハーフ ワ ー ド に格納 さ れ、 上位ハーフ
ワ ー ド は ク リ ア さ れます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ
は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 0; ESR[S] ← 0; ESR[Rx] ← rD
else
(rD)[16:31] ← Mem(Addr)
(rD)[0:15] ← 0
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
169
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lhui
Load Halfword Unsigned Immediate
lhui
1
0
1
1
0
0
1
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM 値を加算 し た結果をハーフ ワ ー ド で揃え た
メ モ リ ロ ケーシ ョ ンか ら 1 ハーフ ワー ド (16 ビ ッ ト ) 読み込みます。 デー タ はレ ジ ス タ rD の下位
ハーフ ワ ー ド に格納 さ れ、 上位ハーフ ワ ー ド は ク リ ア さ れます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る
場合は、 デー タ 格納例外が発生 し ます。 こ れは、 ユーザー モー ド お よ び仮想保護モー ド が イ ネーブ
ルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る 例外は、 ア ド レ ス の最下位
ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 0; ESR[S] ← 0; ESR[Rx] ← rD
else
(rD)[16:31] ← Mem(Addr)
(rD)[0:15] ← 0
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
170
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
171
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lw
Load Word
lw
1
0
1
0
0
1
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rA と rB を加算 し た結果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンか ら 1 ワー ド (32 ビ ッ ト )
読み込みます。 デー タ は、 レ ジ ス タ rD に格納 さ れます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ
は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[30:31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 1; ESR[S] ← 0; ESR[Rx] ← rD
else
(rD) ← Mem(Addr)
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
172
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
lwi
Load Word Immediate
lwi
1
0
1
1
0
1
0
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM 値を加算 し た結果を ワー ド で揃え たメ モリ
ロ ケ ーシ ョ ン から 1 ワ ード (16 ビ ッ ト ) 読み込みま す。 データ は、 レ ジ ス タ rD に格納さ れま す。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。 ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る
場合は、 デー タ 格納例外が発生 し ます。 こ れは、 ユーザー モー ド お よ び仮想保護モー ド が イ ネーブ
ルの場合のア ク セ ス にのみ適用 さ れます。 不整列デー タ ア ク セ ス に よ る 例外は、 ア ド レ ス の最下位
ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[30:31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 1; ESR[S] ← 0; ESR[Rx] ← rD
else
(rD) ← Mem(Addr)
変更 さ れる レ ジ ス タ
•
rD (例外が発生 し た場合は変更な し )
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
173
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
lwx
Load Word Exclusive
lwx
1 1 0 0 1 0
0
rD, rA, rB
rD
6
rA
11
rB
16
1 0 0 0 0 0 0 0 0 0 0
21
31
説明
レ ジ ス タ rA と rB を加算 し た結果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンか ら 1 ワー ド (32 ビ ッ ト )
読み込みます。 デー タ はレ ジ ス タ rD に配置 さ れ、 予約ビ ッ ト はセ ッ ト さ れ、 キ ャ リ ー フ ラ グ
(MSR[C]) は ク リ アにな り ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
ア ク セ ス不可ゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 こ れ
は、 ユーザー モー ド お よび仮想保護モー ド が イ ネーブルの場合のア ク セ ス にのみ適用 さ れます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 であ っ て も 発生 し ません。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 0
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[UM] = 1 and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 0; ESR[DIZ] ← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else
(rD) ← Mem(Addr); Reservation ← 1; MSR[C] ← 0
変更 さ れる レ ジ ス タ
•
rD お よ び MSR[C] (例外が発生 し ない場合)、 例外が発生 し た場合は変更な し
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1の場合 2 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は STX と 共に使用 し て、 セマ フ ォやス ピ ン ロ ッ ク な ど排他的ア ク セ ス を イ ンプ リ メ ン ト
す る ために使用 し ます。
174
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
mfs
Move From Special Purpose Register
mfs
1
0
0
0
1
0
1
rD
6
rD, rS
0
0
0
0
11
0
1
0
16
rS
18
31
説明
特殊用途の レ ジ ス タ rS の内容を レ ジ ス タ rD に コ ピー し ます。 特殊用途レ ジ ス タ TLBLO お よ び
TLBHI は、 イ ンデ ッ ク ス が TLBX であ る 統合 TLB のエン ト リ の内容の コ ピーに使用 さ れます。
擬似 コ ー ド
switch (rS):
case 0x0000 : (rD) ← PC
case 0x0001 : (rD) ← MSR
case 0x0003 : (rD) ← EAR
case 0x0005 : (rD) ← ESR
case 0x0007 : (rD) ← FSR
case 0x000B : (rD) ← BTR
case 0x000D : (rD) ← EDR
case 0x1000 : (rD) ← PID
case 0x1001 : (rD) ← ZPR
case 0x1002 : (rD) ← TLBX
case 0x1003 : (rD) ← TLBLO
case 0x1004 : (rD) ← TLBHI
case 0x200x : (rD) ← PVR[x] (x = 0 ~ 11)
default : (rD) ← Undefined
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
アセ ンブ リ 言語で特殊用途レ ジ ス タ を参照す る には、PC では rpc、MSR では rmsr、EAR では rear、
ESR では resr、FSR では rfsr、BTR では rbtr、EDR では redr、PID では rpid、ZPR では rzpr、TLBLO
では rtlblo、 TLBHI では rtlbhi、 TLBX では rtlbx、 PVR0 ~ PVR11 では rpvr0 ~ rpvr11 を使用 し
て く だ さ い。
MSR の値には、 パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていな
い場合 も あ り ます。 MSR に影響 し ない命令は、 MFS 命令の前に実行 し 、 正 し い MSR 値が得 ら れ
る よ う にす る 必要があ り ます。
FSR の値には、パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていない
場合 も あ り ます。 FSR に影響 し ない命令は、 MFS 命令の前に実行 し 、 正 し い FSR 値が得 ら れ る よ
う にす る 必要があ り ます。
EAR、 ESR お よ び BTR は、 MicroBlaze で C_*_ EXCEPTION パ ラ メ ー タ の少な く と も 1 つが 1
に設定 さ れてい る 場合にのみオペ ラ ン ド と し て使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
175
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
EDR は、 C_FSL_EXCEPTION パ ラ メ ー タ が 1 に、 C_FSL_LINKS パ ラ メ ー タ が 0 よ り 大 き い値
に設定 さ れてい る 場合にのみオペ ラ ン ド と し て使用可能です。
FSR は、C_USE_FPU パ ラ メ ー タ が 0 よ り 大 き い値に設定 さ れてい る場合にのみオペ ラ ン ド と し て
使用可能です。
PID、 ZPR、 TLBLO お よ び TLBHI は、 C_USE_MMU > 1 お よ び C_MMU_TLB_ACCESS = 1 ま
たは 3 の場合にのみオペ ラ ン ド と し て使用可能です。
TLBX は C_USE_MMU > 1 お よ び C_MMU_TLB_ACCESS > 0 の場合にのみオペ ラ ン ド と し て
使用可能です。
PVR0 は C_PVR が 1 ま たは 2 に、 PVR1 ~ PVR11 は C_PVR が 2 に設定 さ れてい る 場合にのみ
オペ ラ ン ド と し て使用可能です。
176
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
msrclr
Read MSR and clear bits in MSR
msrclr
1
0
0
0
1
0
1
rD
6
rD, Imm
1
0
0
0
1
11
0
Imm15
16 17
31
説明
特殊用途の レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。IMM 値が 1 であ る ビ ッ ト 位置は、
MSR で ク リ ア さ れます。 IMM 値が 0 であ る ビ ッ ト 位置は、 その ま ま にな り ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1)、IMM 値が C のみに影響す る場合を
除いて こ の命令は特権命令IMM 値が C のみに影響す る場合を除いて こ の命令は特権命令にな り と
な り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 and IMM ≠ 0x4 then
ESR[EC] ← 00111
else
(rD)
← (MSR)
(MSR) ← (MSR) ∧ (IMM))
変更 さ れる レ ジ ス タ
•
rD
•
MSR
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
MSRCLR を実行す る と 、 キ ャ リ ー ビ ッ ト はすぐ に変化 し ますが、 その他の ビ ッ ト は命令が実行 さ
れてか ら 1 ク ロ ッ ク サ イ ク ル後に変化 し ます。 IE ビ ッ ト が ク リ ア さ れた場合、プ ロ セ ッ サはその後
の命令の割 り 込みには反応 し ません。
MSR の値には、 パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていな
い場合 も あ り ます。 MSR に影響 し ない命令は、 MSRCLR 命令の前に実行 し 、 正 し い MSR 値が得
ら れ る よ う にす る 必要があ り ます。
C_USE_MMU >= 1 の場合即値は 215 以下、 それ以外の場合は 214 であ る必要があ り ます。
C_USE_MMU >= 1 の場合 MSR の ビ ッ ト 17 ~ 31 のみが ク リ アにな り 、それ以外の場合はビ ッ ト
18 ~ 31 が ク リ アにな り ます。
こ の命令は、 パ ラ メ ー タ C_USE_MSR_INSTR が 1 に設定 さ れてい る場合にのみ使用可能です。
MSR[VM] を ク リ アす る場合、 命令の後に BRI 4 の よ う な同期分岐命令が必要です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
177
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
msrset
Read MSR and set bits in MSR
msrset
1
0
0
0
1
0
1
rD
6
rD, Imm
1
0
0
0
0
11
0
Imm15
16 17
31
説明
特殊用途の レ ジ ス タ MSR の内容を レ ジ ス タ rD に コ ピー し ます。IMM 値が 1 であ る ビ ッ ト 位置は、
MSR でセ ッ ト さ れます。 IMM 値が 0 であ る ビ ッ ト 位置は、 その ま ま にな り ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1)、IMM 値が C のみに影響す る場合を
除いて こ の命令は特権命令にな り 、 ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が
発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 and IMM ≠ 0x4 then
ESR[EC]← 00111
else
(rD)
← (MSR)
(MSR) ← (MSR) ∨ (IMM)
変更 さ れる レ ジ ス タ
•
rD
•
MSR
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
MSRSET を 実行する と 、キャ リ ー ビ ッ ト はすぐ に変化し ま すが、その他のビ ッ ト は命令が実行さ れ
てから 1 ク ロ ッ ク サイ ク ル後に変化し ま す。 EIP ビ ッ ト ま たは BIP ビ ッ ト がオン に設定さ れた場
合、 プロ セッ サはその後の命令の割り 込みおよ び通常のハード ウ ェ ア ブレ ーク には反応し ま せん。
MSR の値には、 パ イ プ ラ イ ンの ス ト ール ビヘ イ ビ アに よ っ ては直前の命令の結果が含まれていな
い場合 も あ り ます。 MSR に影響 し ない命令は、 MSRSET 命令の前に実行 し 、 正 し い MSR 値が得
ら れ る よ う にす る 必要があ り ます。
C_USE_MMU >= 1 の場合即値は 215 以下、 それ以外の場合は 214 であ る必要があ り ます。
C_USE_MMU >= 1 の場合 MSR の ビ ッ ト 17 ~ 31 のみがセ ッ ト にな り 、それ以外の場合はビ ッ ト
18 ~ 31 がセ ッ ト にな り ます。
こ の命令は、 パ ラ メ ー タ C_USE_MSR_INSTR が 1 に設定 さ れてい る場合にのみ使用可能です。
MSR[VM] を設定す る 場合、 命令の後に BRI 4 の よ う な同期分岐命令が必要です。
178
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
mts
Move To Special Purpose Register
mts
1
0
0
0
1
0
1
0 0
rS, rA
0
0
6
0
rA
11
1
1
16
rS
18
31
説明
レ ジ ス タ rD の内容を特殊用途レ ジ ス タ rS に コ ピー し ます。 特殊用途レ ジ ス タ TLBLO お よ び
TLBHI は、 イ ンデ ッ ク ス が TLBX であ る 統合 TLB のエン ト リ への コ ピーに使用 さ れます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
switch (rS)
case 0x0001 : MSR ← (rA)
case 0x0007 : FSR ← (rA)
case 0x1000 : PID ← (rA)
case 0x1001 : ZPR ← (rA)
case 0x1002 : TLBX ← (rA)
case 0x1003 : TLBLO ← (rA)
case 0x1004 : TLBHI ← (rA)
case 0x1005 : TLBSX ← (rA)
変更 さ れる レ ジ ス タ
•
rS
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
MTS を使用 し て MSR に書 き込む と 、すべての ビ ッ ト は命令が実行 さ れてか ら 1 ク ロ ッ ク サ イ ク ル
後に変化 し ます。 MSR を書 き込む MTS 命令は MSR のデー タ を使用す る ほかの命令 と 連続 し て実
行 し ないで く だ さ い。 IE ビ ッ ト が ク リ ア さ れた場合、 プ ロ セ ッ サはその後の命令の割 り 込みには反
応 し ません。 EIP ビ ッ ト ま たは BIP ビ ッ ト がオンに設定 さ れた場合、 プ ロ セ ッ サはその後の命令の
割 り 込みお よ び通常のハー ド ウ ェ ア ブ レー ク には反応 し ません。
アセ ンブ リ 言語で特殊用途レ ジ ス タ を参照す る には、MSR では rmsr、FSR では rfsr、PID では rpid、
ZPR では rzpr、 TLBLO では rtlblo、 TLBHI では rtlbhi、 TLBX では rtlbx、 TLBSX では rtlbsx を
使用 し て く だ さ い。
PC、ESR、EAR、 BTR、EDR、PVR0 ~ PVR11は、MTS 命令を使用 し て書 き込む こ と はで き ません。
FSR は、 MicroBlaze でパ ラ メ ー タ C_USE_FPU が 0 よ り 大 き い値に設定 さ れてい る場合にのみデ
ス テ ィ ネーシ ョ ン と し て使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
179
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
PID、 ZPR、 お よ び TLBSX は、 C_USE_MMU > 1 お よ び C_MMU_TLB_ACCESS > 1 の場合に
のみデス テ ィ ネーシ ョ ン と し て使用可能です。 TLBLO、 TLBHI、 お よ び TLBX は、 C_USE_MMU
> 1 の場合にのみデス テ ィ ネーシ ョ ン と し て使用可能です。
MSR[VM] ま たは PID を変更す る場合、 命令の後に BRI 4 の よ う な同期分岐命令が必要です。
180
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
mul
Multiply
mul
0
0
1
0
0
0
0
rD, rA, rB
rD
6
rA
rB
11
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA と rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 乗算器で
は、64 ビ ッ ト の結果が出力 さ れます。 こ の値の下位ワ ー ド が rD に格納 さ れます。 上位ワ ー ド は破棄
さ れます。
擬似 コ ー ド
(rD) ← LSW( (rA) × (rB) )
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、 タ ーゲ ッ ト アーキテ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、 MicroBlaze でパ
ラ メ ー タ C_USE_HW_MUL が 0 よ り 大 き い値に設定 さ れてい る場合にのみ使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
181
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
mulh
Multiply High
mulh
0
0
1
0
0
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
21
0
0
0
0
0
0
0
0
1
31
説明
レ ジ ス タ rA と rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 の符号付
き 乗算では、 64 ビ ッ ト の結果が出力 さ れます。 こ の値の上位ワ ー ド は rD に格納 さ れ、 下位ワ ー ド
は破棄 さ れます。
擬似 コ ー ド
(rD) ← MSW( (rA) × (rB) ), signed
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、MicroBlaze でパ ラ
メ ー タ C_USE_HW_MUL が 2 に設定 さ れてい る場合にのみ使用可能です。
MULH を使用す る 場合は MUL 命令の 30 ビ ッ ト 目 と 31 ビ ッ ト 目を 0 に し 、2 つの命令が区別で き
る よ う にす る 必要があ り ます。 MicroBlaze の以前のバージ ョ ンでは、 こ れ ら の ビ ッ ト は 0 に定義 さ
れてい ま し たが、 実際の値は定義どお り ではあ り ませんで し た。
182
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
mulhu
Multiply High Unsigned
mulhu
0
0
1
0
0
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
21
0
0
0
0
0
0
1
1
31
説明
レ ジ ス タ rA と rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 32 X 32 の符号な
し 乗算では、 符号な し 64 ビ ッ ト の結果が出力 さ れます。 こ の値の上位ワ ー ド は rD に格納 さ れ、 下
位ワ ー ド は破棄 さ れます。
擬似 コ ー ド
(rD) ← MSW( (rA) × (rB) ), unsigned
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、タ ーゲ ッ ト アーキ テ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、MicroBlaze でパ ラ
メ ー タ C_USE_HW_MUL が 2 に設定 さ れてい る場合にのみ使用可能です。
MULHU を使用す る 場合は MUL 命令の 30 ビ ッ ト 目 と 31 ビ ッ ト 目を 0 に し 、2 つの命令が区別で
き る よ う にす る 必要があ り ます。 MicroBlaze の以前のバージ ョ ンでは、 こ れ ら の ビ ッ ト は 0 に定義
さ れてい ま し たが、 実際の値は定義どお り ではあ り ませんで し た。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
183
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
mulhsu
Multiply High Signed Unsigned
mulhsu
0
0
1
0
0
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
21
0
0
0
0
0
1
0
31
説明
レ ジ ス タ rA お よ び rB の内容を乗算 し 、 その結果を レ ジ ス タ rD に格納 し ます。 こ の 符号付き 32
ビ ッ ト X 符号な し 32 ビ ッ ト の乗算では、符号付 き 64 ビ ッ ト の結果が出 さ れます。 こ の値の最上位
ワ ー ド が rD に格納 さ れます。 最下位ワ ー ド は、 破棄 さ れます。
擬似 コ ー ド
(rD) ← MSW( (rA), signed × (rB), unsigned ), signed
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル
メモ
こ の命令は、 タ ーゲ ッ ト アーキテ ク チ ャ に乗算器プ リ ミ テ ィ ブがあ り 、 MicroBlaze のパ ラ メ ー タ
C_USE_HW_MUL が 2 に設定 さ れてい る場合にのみ有効です。
MULHSU を使用す る 場合は MUL 命令の 30 ビ ッ ト 目 と 31 ビ ッ ト 目を 0 に し 、 2 つの命令が区別
で き る よ う にす る 必要があ り ます。 MicroBlaze の以前のバージ ョ ンでは、 こ れ ら の ビ ッ ト は 0 に
定義 さ れてい ま し たが、 実際の値は定義どお り ではあ り ませんで し た。
184
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
muli
Multiply Immediate
muli
0
0
1
1
0
0
0
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM の値を乗算 し 、 その結果を rD に格納 し ま
す。 こ の 32 X 32 乗算器では、64 ビ ッ ト の結果が出力 さ れます。 こ の値の下位 ワー ド が rD に格納 さ
れます。 上位ワ ー ド は破棄 さ れます。
擬似 コ ー ド
(rD) ← LSW( (rA) × sext(IMM) )
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 3 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
こ の命令は、 タ ーゲ ッ ト アーキテ ク チ ャ に乗算器プ リ ミ テ ィ ブが含まれてお り 、 MicroBlaze でパ
ラ メ ー タ C_USE_HW_MUL が 0 よ り 大 き い値に設定 さ れてい る場合にのみ使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
185
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
or
Logical OR
or
1
0
0
0
0
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を OR 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ∨
(rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
186
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
ori
Logical OR with Immediate
ori
1
0
0
1
0
0
0
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
レ ジ ス タ rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を OR 演算 し 、その結果を
レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ∨
sext(IMM)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
187
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
pcmpbf
Pattern Compare Byte Find
pcmpbf
1
0
0
0
0
0
0
rD, rA, rB
rD
6
バ イ ト 単位で比較 し 、 最初に一致 し た位置を返す
rA
11
rB
16
1
0
0
0
21
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容をバ イ ト 単位で比較 し ます。
•
rD には、 MSB を位置 1、 LSB を位置 4 と し て、最初に一致 し たバ イ ト の位置が格納 さ れます。
•
一致す る バ イ ト ペアがない場合は、 rD は 0 に設定 さ れます。
擬似 コ ー ド
if rB[0:7] = rA[0:7] then
(rD) ← 1
else
if rB[8:15] = rA[8:15] then
(rD) ← 2
else
if rB[16:23] = rA[16:23] then
(rD) ← 3
else
if rB[24:31] = rA[24:31] then
(rD) ← 4
else
(rD) ← 0
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
こ の命令は、 パ ラ メ ー タ C_USE_PCMP_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。
188
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
pcmpeq
Pattern Compare Equal
pcmpeq
1
0
0
0
0
1
0
rD, rA, rB
rD
6
一致 し た場合に 1 を返す
rA
11
rB
16
1
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を比較 し ます。
•
2 つの レ ジ ス タ の内容が一致 し た場合は rD に 1 が格納 さ れ、 一致 し ない場合は 0 が格納 さ れ
ます。
擬似 コ ー ド
if (rB) = (rA) then
(rD) ← 1
else
(rD) ← 0
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
こ の命令は、 パ ラ メ ー タ C_USE_PCMP_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
189
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
pcmpne
Pattern Compare Not Equal
pcmpne
1
0
0
0
0
1
1
rD, rA, rB
rD
6
一致 し ない場合に 1 を返す
rA
11
rB
16
1
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を比較 し ます。
•
2 つの レ ジ ス タ の内容が一致 し た場合は rD に 0 が格納 さ れ、 一致 し ない場合は 1 が格納 さ れ
ます。
擬似 コ ー ド
if (rB) = (rA) then
(rD) ← 0
else
(rD) ← 1
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
こ の命令は、 パ ラ メ ー タ C_USE_PCMP_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。
190
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
put
0
Put to fsl interface
1
1
0
1
1
0
naput
rA, FSLx
FSL x にデー タ を書 き込み
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
tnaput
FSLx
FSL x にデー タ を書 き 込み ( テ ス ト のみ)
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
ncaput
rA, FSLx
FSL x に制御を書 き込み
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
tncaput
FSLx
FSL x に制御を書 き 込み ( テ ス ト のみ)
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
0
0
0 0 0
6
rA
11
1 n c
t
a 0 0 0 0 0 0 0
16
FSLx
28
31
説明
レ ジ ス タ rA の値を FSLx イ ン タ ーフ ェ イ ス に書 き 込みます。
put 命令には、 16 種類あ り ます。
ブ ロ ッ キ ン グの put 命令 (n ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ ス に書 き 込むスペース がで き る
ま での間 MicroBlaze を ス ト ール し ます。ノ ンブ ロ ッ キ ン グの put 命令では MicroBlaze は ス ト ール
さ れず、 スペース があ る場合はキ ャ リ ーが 0 に、 スペース がない場合は 1 に設定 さ れます。
すべてのデー タ put 命令 (c ビ ッ ト が 0) では、 FSL イ ン タ ーフ ェ イ スへの制御ビ ッ ト が 0 に、 すべ
ての制御 put 命令 (c ビ ッ ト が 1) では 1 に設定 さ れます。
テ ス ト の put 命令 (t ビ ッ ト が 1) は、 FSL リ ン ク への書 き 込み信号がアサー ト さ れず、 ソ ース レ ジ
ス タ が必要でない点を除 き、 通常どお り 処理 さ れます。
不可分の put 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ化
さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、
ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
(FSLx) ← (rA)
if (n = 1) then
MSR[Carry] ← (FSLx Full bit)
(FSLx Control bit) ← C
変更 さ れる レ ジ ス タ
•
MSR[Carry]
•
ESR[EC] (特権命令例外が発生 し た場合)
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
191
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
ブ ロ ッ キ ン グの put 命令では、命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール し
ます。 割 り 込みは、 パ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れ、 命令が不可分
でない場合に実行 さ れます。
メモ
アセ ンブ リ 言語で FSLx イ ン タ ーフ ェ イ ス を参照す る には、 rfsl0、 rfsl1、 ... rfsl15 を使用 し ます。
ブ ロ ッ キ ン グの put 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、 パ ラ メ ー タ
C_USE_EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合は、 こ の命令を遅延ス ロ ッ ト に含め
る こ と がで き ません。
こ れ ら の命令は、 MicroBlaze でパ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れてい る 場
合にのみ使用可能です。
拡張命令 (不可分の put 命令) は、 MicroBlaze でパ ラ メ ー タ C_USE_EXTENDED_FSL_INSTR が
1 に設定 さ れてい る 場合にのみ使用可能です。
192
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
putd
0
0
1
Put to fsl interface dynamic
0
0
1
1
0
naputd
rA, rB
FSL rB[28:31] にデー タ を書 き込み
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
tnaputd
rB
FSL rB[28:31] にデー タ を書 き 込み ( テ ス ト のみ)
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
ncaputd
rA, rB
FSL rB[28:31] に制御を書 き込み
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
tncaputd
rB
FSL rB[28:31] に制御を書 き 込み ( テ ス ト のみ)
n : ノ ンブ ロ ッ キ ン グ
a : 不可分
0
0
0
6
0
rA
rB
11
1
16
n
21
c
t
a
0
0
0
0
0
0
31
説明
レ ジ ス タ rA か ら 読み出 し た値を、rB の下位 4 ビ ッ ト で定義 さ れた FSL イ ン タ ーフ ェ イ ス に書 き 込
みます。
putd 命令には、 16 種類あ り ます。
ブ ロ ッ キ ン グの putd 命令 (n ビ ッ ト が 0) では、FSL イ ン タ ーフ ェ イ ス に書 き 込むスペース がで き る
ま での間 MicroBlaze を ス ト ール し ます。 ノ ン ブ ロ ッ キ ン グの putd 命令では MicroBlaze は ス ト ー
ル さ れず、 スペース があ る場合はキ ャ リ ーが 0 に、 スペース がない場合は 1 に設定 さ れます。
すべてのデー タ putd 命令 (c ビ ッ ト が 0) では、FSL イ ン タ ーフ ェ イ スへの制御ビ ッ ト が 0 に、すべ
ての制御 putd 命令 (c ビ ッ ト が 1) では 1 に設定 さ れます。
テ ス ト の putd 命令 (t ビ ッ ト が 1) では、FSL リ ン ク への書 き 込み信号がアサー ト さ れず、 ソ ース レ
ジ ス タ が必要でない点を除 き、 通常どお り 処理 さ れます。
不可分の putd 命令 (a ビ ッ ト が 1) は割 り 込み不可です。 不可分 FSL 命令のシーケ ン スはグループ
化 さ れ、 プ ロ グ ラ ムの フ ロ ーへは割 り 込みで き ません。 ただ し 、 例外は発生 し ます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ れ ら の命令は特権命令にな り 、
ユーザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
(FSL rB[28:31]) ← (rA)
if (n = 1) then
MSR[Carry] ← (FSL rB[28:31] Full bit)
(FSL rB[28:31] Control bit) ← C
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
193
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
変更 さ れる レ ジ ス タ
•
MSR[Carry]
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
ブ ロ ッ キ ン グの putd 命令では、命令が完了可能にな る ま で MicroBlaze のパ イ プ ラ イ ンが ス ト ール
し ます。 割 り 込みは、 命令が不可分 (割 り 込み不可) ではない場合に実行 さ れます。
メモ
ブ ロ ッ キ ン グの putd 命令を遅延ス ロ ッ ト に含め る と 割 り 込みが発生 し な く な る ため、こ の命令を遅
延ス ロ ッ ト に含め る こ と がで き ません。
こ れ ら の命令は、 パ ラ メ ー タ C_FSL_LINKS が 0 よ り 大 き い値に設定 さ れ、 パ ラ メ ー タ C_USE_
EXTENDED_FSL_INSTR が 1 に設定 さ れてい る 場合にのみ使用可能です。
194
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
rsub
0
0
0
Arithmetic Reverse Subtract
rsub
rD, rA, rB
減算
rsubc
rD, rA, rB
キ ャ リ ー付 き 減算
rsubk
rD, rA, rB
減算 ( キ ャ リ ーを保持)
rsubkc
rD, rA, rB
キ ャ リ ー付 き 減算 ( キ ャ リ ーを保持)
0 K C 1
rD
6
rA
11
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rB の内容か ら レ ジ ス タ rA の内容を減算 し 、その結果を レ ジ ス タ rD に格納 し ます。 rsubk
に対 し ては、 命令のビ ッ ト 3 (図で K と 表記) が 1 に設定 さ れてい ます。 rsubc に対 し ては、 命令の
ビ ッ ト 4 (図で C と 表記) が 1 に設定 さ れてい ます。 rsubkc に対 し ては、 両方の ビ ッ ト が 1 に設定
さ れてい ます。
ビ ッ ト 3 が 1 の場合 (rsubk、 rsubkc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値
が保持 さ れます。 ビ ッ ト 3 が 0 の場合 (rsub、 rsubc)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て変
更 さ れます。
ビ ッ ト 4 が 1 の場合 (rsubc、 rsubkc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の実行に影響 し ま
す。 ビ ッ ト 4 が 0 の場合 (rsub、 rsubk)、 キ ャ リ ー フ ラ グの内容は命令の実行には影響 し ません (通
常の加算を実行)。
擬似 コ ー ド
if C = 0 then
(rD) ← (rB) + (rA) + 1
else
(rD) ←(rB) + (rA) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
減算では、 キ ャ リ ー = ( ボ ロ ー ) です。 つま り 、 減算でキ ャ リ ーが設定 さ れてい る場合はボ ロ ーはな
く 、 キ ャ リ ーが設定 さ れていない場合は、 ボ ロ ーがあ り ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
195
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
rsubi
0
0
0
1
Arithmetic Reverse Subtract Immediate
rsubi
rD, rA, IMM
即値減算
rsubic
rD, rA, IMM
キ ャ リ ー付 き即値減算
rsubik
rD, rA, IMM
即値減算 ( キ ャ リ ーを保持)
rsubikc
rD, rA, IMM
キ ャ リ ー付 き即値減算 ( キ ャ リ ーを保持)
K C 1
rD
6
rA
11
IMM
16
31
説明
32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値か ら レ ジ ス タ rA の内容を 減算 し 、 その結果を レ
ジ ス タ rD に格納 し ます。 rsubik に対 し ては、 命令の ビ ッ ト 3 (図で K と 表記) が 1 に設定 さ れてい
ます。 rsubic に対 し ては、 命令の ビ ッ ト 4 (図で C と 表記) が 1 に設定 さ れてい ます。 rsubikc に対
し ては、 両方のビ ッ ト が 1 に設定 さ れてい ます。
ビ ッ ト 3 が 1 の場合 (rsubik、 rsubikc)、 命令の実行結果にかかわ ら ず、 キ ャ リ ー フ ラ グに既存の値
が保持 さ れます。 ビ ッ ト 3 が 0 の場合 (rsubi、 rsubic)、 キ ャ リ ー フ ラ グが命令の実行結果に応 じ て
変更 さ れます。 ビ ッ ト 4 が 1 の場合 (rsubic、 rsubikc)、 キ ャ リ ー フ ラ グの内容 (MSR[C]) が命令の
実行に影響 し ます。 ビ ッ ト 4 が 0 の場合 (rsubi、 rsubik)、 キ ャ リ ー フ ラ グの内容は命令の実行には
影響 し ません (通常の加算を実行)。
擬似 コ ー ド
if C = 0 then
(rD) ← sext(IMM) + (rA) + 1
else
(rD) ←sext(IMM) + (rA) + MSR[C]
if K = 0 then
MSR[C] ←CarryOut
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
減算では、 キ ャ リ ー = ( ボ ロ ー ) です。 つま り 、 減算でキ ャ リ ーが設定 さ れてい る場合はボ ロ ーはな
く 、 キ ャ リ ーが設定 さ れていない場合は、 ボ ロ ーがあ り ます。 デフ ォ ル ト では、 タ イ プ B 命令は 16
ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト に符号拡張 し て、即値オペ ラ ン ド と し
て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、 32 ビ ッ ト の即値を使用で き ます。 32
ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を参照 し て く だ さ い。
196
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
rtbd
Return from Break
rtbd
1
0
0
1
1
0
1
1
0
rA, IMM
0
1
6
0
rA
11
IMM
16
31
説明
ブ レー ク か ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加算 し
て指定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令の後、 MSR の BIP が ク リ ア さ れ、ブ レー ク が イ
ネーブルにな り ます。
こ の命令では、 常に遅延ス ロ ッ ト が使用 さ れます。 RTBD に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前
に実行 さ れます。 こ の遅延ス ロ ッ ト 命令では、 ブ レー ク がデ ィ ス エーブルに さ れます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
MSR[BIP] ←0
MSR[UM] ←MSR[UMS]
MSR[VM] ←MSR[VMS]
変更 さ れる レ ジ ス タ
•
PC
•
MSR[BIP]、 MSR[UM]、 MSR[VM]
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
通常は、 汎用レ ジ ス タ r16 を rA と し て使用 し ます。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
197
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
rtid
Return from Interrupt
rn from Interrupt
rtid
1
0
0
1
1
0
1
1
0
rA, IMM
0
6
0
1
rA
11
IMM
16
31
説明
割 り 込みか ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加算 し
て指定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令の後、 割 り 込みが イ ネーブルにな り ます。
こ の命令では、常に遅延ス ロ ッ ト が使用 さ れます。 RTID に続 く 命令は、常に分岐 タ ーゲ ッ ト の前に
実行 さ れます。 こ の遅延ス ロ ッ ト 命令では、 割 り 込みがデ ィ ス エーブルに さ れます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
MSR[IE] ←1
MSR[UM] ←MSR[UMS]
MSR[VM] ←MSR[VMS]
変更 さ れる レ ジ ス タ
•
PC
•
MSR[IE]、 MSR[UM]、 MSR[VM]
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
通常は、 汎用レ ジ ス タ r14 を rA と し て使用 し ます。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
198
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
rted
Return from Exception
rted
1
0
0
1
1
0
1
1
0
rA, IMM
1
0
6
0
rA
11
IMM
16
31
説明
例外か ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加算 し て指
定 さ れ る ロ ケーシ ョ ンに分岐 し ます。 こ の命令の後、 例外が イ ネーブルにな り ます。
こ の命令では、 常に遅延ス ロ ッ ト が使用 さ れます。 RTED に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前
に実行 さ れます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
MSR[EE] ←1
MSR[EIP] ←0
MSR[UM] ←MSR[UMS]
MSR[VM] ←MSR[VMS]
ESR ←0
変更 さ れる レ ジ ス タ
•
PC
•
MSR[EE]、 MSR[EIP]、 MSR[UM]、 MSR[VM]
•
ESR
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
通常は、汎用レ ジ ス タ r17 を rA と し て使用 し ます。 こ の命令は、 MicroBlaze C_*_EXCEPTION パ
ラ メ ー タ の少な く と も 1 つが 1 に設定 さ れてい る場合ま たは C_USE_MMU > 0 の場合にのみ使用
で き ます。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MSR[EE] が設定 さ れてい る 場合は、 遅延ス ロ ッ ト にあ る命令で例外が発生 し た場合に例
外が イ ネーブルの状態で例外ハン ド ラ の処理が開始す る ため、通常 こ の命令は使用で き ま
せん。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
199
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
メ モ : 例外か ら 戻っ た ら 、MSR[DS] が設定 さ れてい る か をチ ェ ッ ク す る必要があ り ます。設定 さ れ
ていれば、 BTR に格納 さ れてい る ア ド レ ス に戻 り ます。
200
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
rtsd
Return from Subroutine
rtsd
1
0
0
1
1
0
1
1
0
rA, IMM
0
0
6
0
rA
IMM
11
16
31
説明
サブルーチンか ら 戻っ た際に、 rA の内容 と 32 ビ ッ ト に符号拡張 さ れた IMM フ ィ ール ド の値を加
算 し て指定 さ れ る ロ ケーシ ョ ンに分岐 し ます。
こ の命令では、 常に遅延ス ロ ッ ト が使用 さ れます。 RTSD に続 く 命令は、 常に分岐 タ ーゲ ッ ト の前
に実行 さ れます。
擬似 コ ー ド
PC ←(rA) + sext(IMM)
allow following instruction to complete execution
変更 さ れる レ ジ ス タ
•
PC
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
通常は、 汎用レ ジ ス タ r15 を rA と し て使用 し ます。
遅延ス ロ ッ ト は、 imm、 分岐、 ブ レー ク 命令で使用で き ません。 割 り 込みお よ び外部ハー ド ウ ェ ア
ブ レー ク は、 遅延ス ロ ッ ト の分岐が完了す る ま で延期 さ れます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
201
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
sb
Store Byte
sb
1
0
1
0
1
0
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
21
0
0
31
説明
レ ジ ス タ rD の最下位バ イ ト の内容を、 レ ジ ス タ rA と rB の内容を加算 し た結果の メ モ リ ロ ケー
シ ョ ンに格納 し ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止
さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で
き ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else
Mem(Addr) ←(rD)[24:31]
変更 さ れる レ ジ ス タ
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が発生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
202
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
sbi
Store Byte Immediate
sbi
1
0
1
1
1
0
0
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rD の最下位バ イ ト の内容を、 レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値を加
算 し た結果の メ モ リ ロ ケーシ ョ ンに格納 し ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止
さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で
き ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else
Mem(Addr) ← (rD)[24:31]
変更 さ れる レ ジ ス タ
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (例外が発生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
203
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
sext16
Sign Extend Halfword
sext16
1
0
0
0
1
0
0
rD, rA
rD
6
rA
0
11
0
16
0
0
0
0
0
0
0
1
1
0
0
0
0
1
31
説明
ハーフ ワ ー ド (16 ビ ッ ト ) を ワー ド (32 ビ ッ ト ) に符号拡張 し ます。 rA の ビ ッ ト 16 が rD の ビ ッ ト
0 ~ 15 に コ ピー さ れ、 rA のビ ッ ト 16 ~ 31 が rD の ビ ッ ト 16 ~ 31 に コ ピー さ れます。
擬似 コ ー ド
(rD)[0:15] ← (rA)[16]
(rD)[16:31] ←(rA)[16:31]
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
204
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
sext8
Sign Extend Byte
sext8
1
0
0
0
1
0
0
rD, rA
rD
6
rA
0
11
0
16
0
0
0
0
0
0
0
1
1
0
0
0
0
0
31
説明
バ イ ト (8 ビ ッ ト ) を ワ ー ド (32 ビ ッ ト ) に符号拡張 し ます。 rA のビ ッ ト 24 が rD の ビ ッ ト 0 ~ 23
に コ ピー さ れ、 rA ビ ッ ト 24 ~ 31 が rD のビ ッ ト 24 ~ 31 に コ ピー さ れます。
擬似 コ ー ド
(rD)[0:23] ← (rA)[24]
(rD)[24:31] ←(rA)[24:31]
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
205
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
sh
Store Halfword
sh
1
0
1
0
1
0
1
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rD の下位ハーフ ワ ー ド の内容を、レ ジ ス タ rA と rB の内容を加算 し た結果をハーフ ワ ー
ド で揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止
さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で
き ます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 0; ESR[S] ← 1; ESR[Rx] ← rD
else
Mem(Addr) ←(rD)[16:31]
変更 さ れる レ ジ ス タ
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
206
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
shi
Store Halfword Immediate
shi
1
0
1
1
1
0
1
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rD の下位ハーフ ワー ド の内容を、 レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値
を加算 し た結果をハーフ ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。 仮想保護モー ド が イ ネーブルで、ア ク セ ス不可ま たは読
み出 し のみのゾーン保護でア ク セ ス が禁止 さ れてい る場合は、 デー タ 格納例外が発生 し ます。 ア ク
セ ス不可は、 ユーザー モー ド でのみ使用で き ます。 不整列デー タ ア ク セ ス に よ る 例外は、 ア ド レ ス
の最下位ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 0; ESR[S] ← 1; ESR[Rx] ← rD
else
Mem(Addr) ←(rD)[16:31]
変更 さ れる レ ジ ス タ
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
207
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
sra
Shift Right Arithmetic
sra
1
0
0
0
1
0
0
rD, rA
rD
6
rA
0
11
0
16
0
0
0
0
0
0
0
0
0
0
0
0
0
1
31
説明
レ ジ ス タ rA の内容を 1 ビ ッ ト 右に算術シ フ ト し 、 その結果を rD に格納 し ます。 rA の MSB (符号
ビ ッ ト ) は、 rD の MSB に配置 さ れます。 シ フ ト チ ェーンか ら 外れた最下位ビ ッ ト は、 キ ャ リ ー フ
ラ グに配置 さ れます。
擬似 コ ー ド
(rD)[0] ← (rA)[0]
(rD)[1:31] ←(rA)[0:30]
MSR[C] ←(rA)[31]
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
208
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
src
Shift Right with Carry
src
1
0
0
0
1
0
0
rD, rA
rD
6
rA
0
11
0
16
0
0
0
0
0
0
0
0
1
0
0
0
0
1
31
説明
レ ジ ス タ rA の内容を 1 ビ ッ ト 右にシ フ ト し 、その結果を rD に格納 し ます。 キ ャ リ ー フ ラ グ も シ フ
ト チ ェ ーンにシ フ ト さ れ、 rD の MSB に配置 さ れます。 シ フ ト チ ェ ーンか ら 外れた最下位ビ ッ ト
は、 キ ャ リ ー フ ラ グに配置 さ れます。
擬似 コ ー ド
(rD)[0] ← MSR[C]
(rD)[1:31] ←(rA)[0:30]
MSR[C] ←(rA)[31]
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
209
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
srl
Shift Right Logical
srl
1
0
0
0
1
0
0
rD, rA
rD
6
rA
0
11
0
16
0
0
0
0
0
0
0
1
0
0
0
0
0
1
31
説明
レ ジ ス タ rA の内容を 1 ビ ッ ト 右に論理シ フ ト し 、その結果を rD に格納 し ます。0 がシ フ ト チ ェ ー
ンにシ フ ト さ れ、rD の MSB に配置 さ れます。シ フ ト チ ェーンか ら 外れた最下位ビ ッ ト は、キ ャ リ ー
フ ラ グに配置 さ れます。
擬似 コ ー ド
(rD)[0] ← 0
(rD)[1:31] ←(rA)[0:30]
MSR[C] ←(rA)[31]
変更 さ れる レ ジ ス タ
•
rD
•
MSR[C]
レ イテンシ
1 ク ロ ッ ク サイ クル
210
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
sw
Store Word
sw
1
0
1
0
1
1
0
rD, rA, rB
rD
6
rA
11
rB
16
0
0
0
0
0
0
0
0
0
0
21
0
31
説明
レ ジ ス タ rD の内容を、 レ ジ ス タ rA と rB の内容を加算 し た結果を ワー ド で揃え た メ モ リ ロ ケー
シ ョ ンに格納 し ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止
さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で
き ます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + (rB)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[30:31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 1; ESR[S] ← 1; ESR[Rx] ← rD
else
Mem(Addr) ← (rD)[0:31]
変更 さ れる レ ジ ス タ
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
211
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
swi
Store Word Immediate
swi
1
0
1
1
1
1
0
rD, rA, IMM
rD
6
rA
11
IMM
16
31
説明
レ ジ ス タ rD の内容を、レ ジ ス タ rA と 32 ビ ッ ト に符号拡張 さ れた IMM の値を加算 し た結果を ワ ー
ド で揃えた メ モ リ ロ ケーシ ョ ンに格納 し ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止
さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で
き ます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 でない場合に発生 し ます。
擬似 コ ー ド
Addr ← (rA) + sext(IMM)
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS]← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Addr[30:31] ≠ 0 then
ESR[EC] ← 00001; ESR[W] ← 1; ESR[S] ← 1; ESR[Rx] ← rD
else
Mem(Addr) ←(rD)[0:31]
変更 さ れる レ ジ ス タ
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
•
ESR[W]、 ESR[Rx] (不整列デー タ ア ク セ ス に よ る例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
212
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
213
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
swx
Store Word Exclusive
swx
1 1 0 1 1 0
0
rD, rA, rB
rD
6
rA
11
rB
16
1 0 0 0 0 0 0 0 0 0 0
21
31
説明
予約ビ ッ ト がセ ッ ト さ れてい る場合、 レ ジ ス タ rD の内容を レ ジ ス タ rA と rB の内容を加算 し た結
果を ワ ー ド で揃えた メ モ リ ロ ケーシ ョ ンに条件付で格納 し ます。格納 さ れ る場合はキ ャ リ ー ビ ッ ト
(MSR[C]) がセ ッ ト さ れ、 格納 さ れない場合は ク リ アにな り ます。 予約ビ ッ ト は ク リ アにな り ます。
デー タ TLB ミ ス 例外は、仮想保護モー ド が イ ネーブルで、ア ド レ ス に対応す る有効な変換エン ト リ
が TLB で検出 さ れない場合に発生 し ます。
仮想保護モー ド が イ ネーブルで、 ア ク セ ス不可ま たは読み出 し のみのゾーン保護でア ク セ ス が禁止
さ れてい る 場合は、 デー タ 格納例外が発生 し ます。 ア ク セ ス不可は、 ユーザー モー ド でのみ使用で
き ます。
不整列デー タ ア ク セ ス に よ る例外は、 ア ド レ ス の最下位ビ ッ ト が 0 であ っ て も 発生 し ません。
擬似 コ ー ド
Addr ← (rA) + (rB)
if Reservation = 0 then
MSR[C] ← 1
else
if TLB_Miss(Addr) and MSR[VM] = 1 then
ESR[EC]← 10010;ESR[S]← 1
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else if Access_Protected(Addr) and MSR[VM] = 1 then
ESR[EC] ← 10000;ESR[S]← 1; ESR[DIZ] ← No-access-allowed
MSR[UMS] ← MSR[UM]; MSR[VMS] ← MSR[VM]; MSR[UM] ← 0; MSR[VM] ← 0
else
Mem(Addr) ←(rD)[0:31]; Reservation ←0; MSR[C] ←0
変更 さ れる レ ジ ス タ
•
MSR[C] (例外が発生 し ない場合)
•
MSR[UM]、 MSR[VM]、 MSR[UMS]、 MSR[VMS] (TLB ミ ス例外ま たはデー タ 格納例外が発
生 し た場合)
•
ESR[EC]、 ESR[S] (例外が発生 し た場合)
•
ESR[DIZ] (デー タ 格納例外が発生 し た場合)
レ イテンシ
C_AREA_OPTIMIZED=0 の場合 1 ク ロ ッ ク サ イ ク ル
C_AREA_OPTIMIZED=1 の場合 2 ク ロ ッ ク サ イ ク ル
214
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
メモ
こ の命令は LDX と 共に使用 し て、 セマ フ ォやス ピ ン ロ ッ ク な ど排他的ア ク セ ス を イ ンプ リ メ ン ト
す る ために使用 し ます。
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
215
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
wdc
Write to Data Cache
wdc
rA,rB
wdc.flush
rA,rB
wdc.clear
rA,rB
1 0 0 1 0 0 0 0 0 0 0
0
6
rA
1
1
rB
0 0 0 0 1 1 F 0 1 T 0
1
6
2
7
3
1
タ グに書 き込み、 キ ャ ッ シ ュ
ラ イ ン を無効に、 ま たはフ ラ ッ シ ュ し ます。
説明
デー タ
キャ ッシュ
wdc.flush は F ビ ッ ト のセ ッ ト 、 wdc.clear は T ビ ッ ト のセ ッ ト に使用 し ます。
C_DCACHE_USE_WRITEBACK が 1 に設定 さ れてい る場合、 F ビ ッ ト がセ ッ ト さ れていれば、
キ ャ ッ シ ュ ラ イ ンが フ ラ ッ シ ュ さ れ無効にな り ます。 それ以外の場合は、 キ ャ ッ シ ュ ラ イ ンが無効
にな り 、 メ モ リ に書 き 込まれていないデー タ が破棄 さ れます。 T ビ ッ ト がセ ッ ト さ れていれば、ア ド
レ ス が一致す る キ ャ ッ シ ュ ラ イ ンのみが無効にな り ます。 rB が追加 さ れた レ ジ ス タ rA は、 影響を
受けた キ ャ ッ シ ュ ラ イ ンのア ド レ ス です。
C_DCACHE_USE_WRITEBACK が 0 に ク リ ア さ れてい る 場合、 キ ャ ッ シ ュ ラ イ ンは常に無効に
な り ます。 レ ジ ス タ rA には影響を受けた キ ャ ッ シ ュ ラ イ ンのア ド レ ス が含まれ、 rB の値は使用 さ
れません。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
if C_DCACHE_USE_WRITEBACK = 1 then
address ←(Ra) + (Rb)
else
address ←(Ra)
if C_DCACHE_LINE_LEN = 4 then
cacheline ←(DCache Line)[(Ra) >> 4]
←address &0xfffffff0
address
if C_DCACHE_LINE_LEN = 8 then
cacheline ←(DCache Line)[(Ra) >> 5]
←address &0xffffffe0
address
if F = 1 and cacheline.Dirty then
for i = 0 .. C_DCACHE_LINE_LEN - 1 loop
if cacheline.Valid[i] then
Mem(address + i * 4) ←cacheline.Data[i]
if T = 0 then
cacheline.Tag ← 0
else if cacheline.Address = address then
cacheline.Tag ← 0
216
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
変更 さ れる レ ジ ス タ
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
wdc お よ び wdc.clear の場合 2 ク ロ ッ ク サ イ ク ル
wdc.flush の場合 2 + N ク ロ ッ ク サ イ ク ル (N はキ ャ ッ シ ュ ラ イ ン を メ モ リ に フ ラ ッ シ ュ す る のに
必要な ク ロ ッ ク サ イ ク ル数)
メモ
wdc、 wdc.flush お よ び wdc.clear 命令は、 デー タ キ ャ ッ シ ュ イ ネーブル (MSR[DCE]) か ら 独立 し
ていて、 デー タ キ ャ ッ シ ュ が イ ネーブルま たはデ ィ ス エーブル さ れていて も 一緒に使用で き ます。
wdc.clear 命令は、 デ ィ レ ク ト メ モ リ ア ク セ ス デバ イ ス に よ っ て書き 込まれ る バ ッ フ ァ な ど、 メ モ
リ の特定のエ リ ア を無効にす る ための も のです。 こ の命令を使用 し 、 ほかのキ ャ ッ シ ュ ラ イ ンが
誤っ て無効にな ら ない よ う 、 ま だ メ モ リ に書 き 込まれていないデー タ が誤っ て破棄 さ れない よ う に
し ます。
影響を受け る キ ャ ッ シ ュ ラ イ ンのア ド レ ス は、パ ラ メ ー タ C_USE_MMU や MMU が仮想モー ド ま
たは実モー ド であ る かに関係 し てお ら ず、 常に物理ア ド レ ス です。
キ ャ ッ シ ュ 全体を フ ラ ッ シ ュ す る ために wdc.flush をループで使用す る と 、 ループはキ ャ ッ シ ュ
ベース ア ド レ ス と し て Ra を、 ループ カ ウ ン タ と し て Rb を使用 し て最適化す る こ と がで き ます。
addik
addik
loop: wdc.flush
bgtid
addik
r5,r0,C_DCACHE_BASEADDR
r6,r0,C_DCACHE_BYTE_SIZE-C_DCACHE_LINE_LEN*4
r5,r6
r6,loop
r6,r6,-C_DCACHE_LINE_LEN*4
キ ャ ッ シ ュ の メ モ リ エ リ ア を無効にす る ために wdc.clear をループで使用する と 、 ループは メ モ リ
エ リ ア ベース ア ド レ ス と し て Ra を、ループ カ ウ ン タ と し て Rb を使用 し て最適化す る こ と がで き
ます。
addik
addik
loop: wdc.clear
bgtid
addik
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
r5,r0,memory_area_base_address
r6,r0,memory_area_byte_size-C_DCACHE_LINE_LEN*4
r5,r6
r6,loop
r6,r6,-C_DCACHE_LINE_LEN*4
japan.xilinx.com
217
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
wic
Write to Instruction Cache
wic
1
0
0
0
1
0
0
0 0
rA,rB
0
6
0
0
rA
rB
11
0
0
0
0
16
1
1
0
1
0
0
0
31
説明
命令キ ャ ッ シ ュ タ グに書 き込み、キ ャ ッ シ ュ ラ イ ン を無効に し ます。 レ ジ ス タ rB は使用 さ れず、レ
ジ ス タ rA には無効にな っ たキ ャ ッ シ ュ ラ イ ンのア ド レ ス が含まれます。
MicroBlaze で MMU が使用 さ れ る 場合 (C_USE_MMU >= 1) こ の命令は特権命令にな り 、 ユー
ザー モー ド (MSR[UM] = 1) で使用す る と 特権命令例外が発生 し ます。
擬似 コ ー ド
if MSR[UM] = 1 then
ESR[EC] ← 00111
else
if C_ICACHE_LINE_LEN
(ICache Line)[(Ra)
if C_ICACHE_LINE_LEN
(ICache Line)[(Ra)
= 4 then
>> 4].Tag ← 0
= 8 then
>> 5].Tag ← 0
変更 さ れる レ ジ ス タ
•
ESR[EC] (特権命令例外が発生 し た場合)
レ イテンシ
2 ク ロ ッ ク サイ クル
メモ
IC 命令は、命令キ ャ ッ シ ュ イ ネーブル (MSR[ICE]) か ら は独立 し ていて、命令キ ャ ッ シ ュ が イ ネー
ブルであ っ て も 、 デ ィ ス エーブルであ っ て も 使用す る こ と がで き ます。
影響を受け る キ ャ ッ シ ュ ラ イ ンのア ド レ ス は、パ ラ メ ー タ C_USE_MMU や MMU が仮想モー ド ま
たは実モー ド であ る かに関係 し てお ら ず、 常に物理ア ド レ ス (MSR[ICE]) です。
218
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
命令
xor
Logical Exclusive OR
xor
1
0
0
0
0
1
0
rD, rA, rB
rD
6
rA
11
rB
16
0
21
0
0
0
0
0
0
0
0
0
0
31
説明
レ ジ ス タ rA の内容 と レ ジ ス タ rB の内容を XOR 演算 し 、 その結果を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ⊕ (rB)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)
japan.xilinx.com
219
第 4 章 : MicroBlaze 命令セ ッ ト アーキテ ク チ ャ
xori
Logical Exclusive OR with Immediate
xori
1
0
0
1
0
1
0
rD, rA, IMM
rD
6
rA
IMM
11
16
31
説明
IMM フ ィ ール ド の左側に 0 を 16 ビ ッ ト 分追加 し て 32 ビ ッ ト に拡張 し 、 拡張 さ れた IMM の内容
と レ ジ ス タ rA の内容を XOR 演算 し て、 その結果を レ ジ ス タ rD に格納 し ます。
擬似 コ ー ド
(rD) ← (rA) ⊕ sext(IMM)
変更 さ れる レ ジ ス タ
•
rD
レ イテンシ
1 ク ロ ッ ク サイ クル
メモ
デフ ォ ル ト では、 タ イ プ B 命令は 16 ビ ッ ト の IMM フ ィ ール ド の値を取 り 込み、 それを 32 ビ ッ ト
に符号拡張 し て、 即値オペ ラ ン ド と し て使用 し ます。 タ イ プ B 命令の前に imm 命令を使用す る と 、
32 ビ ッ ト の即値を使用で き ます。 32 ビ ッ ト の即値の使用に関す る詳細は、 166 ページの 「imm」 を
参照 し て く だ さ い。
220
japan.xilinx.com
MicroBlaze プ ロ セ ッ サ リ フ ァ レ ン ス ガ イ ド
UG081 (v10.3)