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