NOTICEOFDISCLAIMER:Xilinxis providing this design, code, or information "as is." By providing the design, code, or information as one
possible implementation of this feature, application, or standard, Xilinx makes no representation that this implementation is free from any
claims of infringement. You are responsible for obtaining any rights you may require for your implementation. Xilinx expressly disclaims any
warranty whatsoever with respect to the adequacy of the implementation, including but not limited to any warranties or representations that
this implementation is free from claims of infringement and any implied warranties of merchantability or fitness for a particular purpose.
MicroBlaze Processor Reference Guidewww.xilinx.comUG081 (v6.0) June 1, 2006
1-800-255-7778
MicroBlaze Processor Reference Guide
UG081 (v6.0) June 1, 2006
The following table shows the revision history for this document.
UG081 (v6.0) June 1, 2006www.xilinx.comMicroBlaze Processor Reference Guide
1-800-255-7778
R
About This Guide
Welcome to the MicroBlaze Processor Reference Guide. This document provides
information about the 32-bit soft processor MicroBlaze, which is part of the Embedded
Processor Development Kit (EDK). The document is intended as a guide to the MicroBlaze
hardware architecture.
Manual Contents
This manual discusses the following topics specific to MicroBlaze soft processor:
•Core Architecture
•Bus Interfaces and Endianness
•Application Binary Interface
•Instruction Set Architecture
Preface
Additional Resources
For additional information, go to http://support.xilinx.com. The following table lists
some of the resources you can access from this web-site. You can also directly access these
resources using the provided URLs.
ResourceDescription/URL
TutorialsTutorials covering Xilinx design flows, from design entry to
Answer BrowserDatabase of Xilinx solution records
Application NotesDescriptions of device-specific design techniques and approaches
Data BookPages from The Programmable Logic Data Book, which contains
The MicroBlaze embedded processor soft core is a reduced instruction set computer (RISC)
optimized for implementation in Xilinx field programmable gate arrays (FPGAs).
Figure 1-1 shows a functional block diagram of the MicroBlaze core.
Chapter 1
IXCL_M
IXCL_S
Features
bus interfacebus interface
I-Cache
IOPB
ILMB
Bus
IF
Optional MicroBlaze feature
Program
Counter
Instruction
Special
Purpose
Registers
Buffer
Instruction
Decode
ALU
Shift
Barrel Shift
Multiplier
Divider
FPU
Register File
32 X 32b
Figure 1-1:MicroBlaze Core Block Diagram
Data-sideInstruction-side
D-Cache
Bus
IF
DXCL_M
DXCL_S
DOPB
DLMB
MFSL 0..7
SFSL 0..7
The MicroBlaze soft core processor is highly configurable, allowing users to select a
specific set of features required by their design.
The processor’s fixed feature set includes:
•Thirty-two 32-bit general purpose registers
•32-bit instruction word with three operands and two addressing modes
In addition to these fixed features the MicroBlaze processor is parametrized to allow
selective enabling of additional functionality. Older (deprecated) versions of MicroBlaze
support a subset of the optional features described in this manual. Only the latest (active)
version of MicroBlaze (v5.00a) supports all options.
Xilinx recommends that all new designs use the latest active version of the MicroBlaze
processor.
Table 1-1:Configurable Feature Overview by MicroBlaze Version
MicroBlaze Versions
Feature
v2.10av3.00av4.00av5.00a
Version Statusdeprecateddeprecateddeprecatedactive
Processor pipeline depth3335
On-chip Peripheral Bus (OPB) data side interfaceoptionoptionoptionoption
On-chip Peripheral Bus (OPB) instruction side interfaceoptionoptionoptionoption
Local Memory Bus (LMB) data side interfaceoptionoptionoptionoption
Local Memory Bus (LMB) instruction side interfaceoptionoptionoptionoption
Hardware barrel shifteroptionoptionoptionoption
Hardware divideroptionoptionoptionoption
Hardware debug logicoptionoptionoptionoption
Fast Simplex Link (FSL) interfaces0-70-70-70-7
Machine status set and clear instructionsoptionoptionoptionYes
Instruction cache over IOPB interfaceoptionoptionoptionNo
Data cache over IOPB interfaceoptionoptionoptionNo
Instruction cache over CacheLink (IXCL) interface-optionoptionoption
Data cache over CacheLink (DXCL) interface-optionoptionoption
4 or 8-word cache line on XCL-44option
Hardware exception support-optionoptionoption
Pattern compare instructions--optionYes
Floating point unit (FPU)--optionoption
Disable hardware multiplier
1
--optionoption
Hardware debug readable ESR and EAR--YesYes
Processor Version Register (PVR)---option
1. Used in Virtex-II and subsequent families, for saving MUL18 and DSP48 primitives
MicroBlaze uses Big-Endian, bit-reversed format to represent data. The hardware
supported data types for MicroBlaze are word, half word, and byte. The bit and byte
organization for each type is shown in the following tables.
Table 1-2:Word Data Type
R
Byte addressnn+1n+2n+3
Byte label0123
Byte
significance
Bit label031
Bit significanceMSBitLSBit
Table 1-3:Half Word Data Type
Byte addressnn+1
Byte label01
Byte
significance
Bit label015
Bit significanceMSBitLSBit
Table 1-4:Byte Data Type
Byte addressn
Bit label07
MSByteLSByte
MSByteLSByte
Bit significanceMSBitLSBit
Instructions
All MicroBlaze instructions are 32 bits and are defined as either Type A or TypeB. Type A
instructions have up to two source register operands and one destination register operand.
TypeB instructions have one sourceregister and a 16-bit immediate operand (which can be
extended to 32 bits by preceding the Type B instruction with an IMM instruction). Type B
instructions have a single destination register operand. Instructions are provided in the
following functional categories: arithmetic, logical, branch, load/store, and special.
Table 1-6 lists the MicroBlaze instruction set. Refer to Chapter 4, “MicroBlaze Instruction
Set Architecture”, for more information on these instructions. Table 1-5 describes the
instruction set nomenclature used in the semantics of each instruction.
RaR0 - R31, General Purpose Register, source operand a
RbR0 - R31, General Purpose Register, source operand b
RdR0 - R31, General Purpose Register, destination operand
SPR[x]Special Purpose Register number x
MSRMachine Status Register = SPR[1]
ESRException Status Register = SPR[5]
EARException Address Register = SPR[3]
FSRFloating Point Unit Status Register = SPR[7]
PVRxProcessor Version Register, where x is the register number = SPR[8192 + x]
BTRBranch Target Register = SPR[11]
PCExecute stage Program Counter = SPR[0]
x[y]Bit y of register x
x[y:z]Bit range y to z of register x
xBit inverted value of register x
Imm16 bit immediate value
Immxx bit immediate value
FSLx3 bit Fast Simplex Link (FSL) port designator where x is the port number
CCarry flag, MSR[29]
SaSpecial Purpose Register, source operand
SdSpecial Purpose Register, destination operand
s(x)Sign extend argument x to 32-bit value
*AddrMemory contents at location Addr (data-size aligned)
:=Assignment operator
=Equality comparison
!=Inequality comparison
>Greater than comparison
>=Greater than or equal comparison
<Less than comparison
<=Less than or equal comparison
+Arithmetic add
*Arithmetic multiply
/Arithmetic divide
>> xBit shift right x bits
<< xBit shift left x bits
andLogic AND
orLogic OR
xorLogic exclusive OR
op1 if cond else op2Perform op1 if condition cond is true, else perform op2
&Concatenate. E.g. “0000100 & Imm7” is the concatenation of the fixed field “0000100” and
a 7 bit immediate value.
signedOperation performed on signed integer data type. All arithmetic operations are performed
on signed word operands, unless otherwise specified
unsignedOperation performed on unsigned integer data type
floatOperation performed on floating point data type
R
Table 1-6:MicroBlaze Instruction Set Summary
Type A0-56-1011-15 16-2021-31
Semantics
Type B0-56-1011-1516-31
ADD Rd,Ra,Rb000000RdRaRb00000000000Rd := Rb + Ra
RSUB Rd,Ra,Rb000001RdRaRb00000000000Rd := Rb + Ra + 1
ADDC Rd,Ra,Rb000010RdRaRb00000000000Rd := Rb + Ra + C
RSUBC Rd,Ra,Rb000011RdRaRb00000000000Rd := Rb + Ra + C
ADDK Rd,Ra,Rb000100RdRaRb00000000000Rd := Rb + Ra
RSUBK Rd,Ra,Rb000101RdRaRb00000000000Rd := Rb + Ra + 1
ADDKC Rd,Ra,Rb000110RdRaRb00000000000Rd := Rb + Ra + C
RSUBKC Rd,Ra,Rb000111RdRaRb00000000000Rd := Rb + Ra + C
CMP Rd,Ra,Rb000101RdRaRb00000000001Rd := Rb + Ra + 1
Rd[0] := 0 if (Rb >= Ra) else
Rd[0] := 1
CMPU Rd,Ra,Rb000101RdRaRb00000000011Rd := Rb + Ra + 1 (unsigned)
Rd[0] := 0 if (Rb >= Ra, unsigned) else
Rd[0] := 1
ADDI Rd,Ra,Imm001000RdRaImmRd := s(Imm) + Ra
RSUBI Rd,Ra,Imm001001RdRaImmRd := s(Imm) + Ra + 1
ADDIC Rd,Ra,Imm001010RdRaImmRd := s(Imm) + Ra + C
RSUBIC Rd,Ra,Imm001011RdRaImmRd := s(Imm) + Ra + C
ADDIK Rd,Ra,Imm001100RdRaImmRd := s(Imm) + Ra
RSUBIK Rd,Ra,Imm001101RdRaImmRd := s(Imm) + Ra + 1
Table 1-6:MicroBlaze Instruction Set Summary (Continued)
Type A0-56-1011-15 16-2021-31
Type B0-56-1011-1516-31
R
Semantics
PUT Ra,FSLx01101100000Ra1000000000000 &
FSLx := Ra (blocking data write)
FSLx
NGET Rd,FSLx011011Rd000000100000000000 &
FSLx
Rd := FSLx (non-blocking data read)
MSR[FSL] := 1 if (FSLx_S_Control = 1)
MSR[C] := not FSLx_S_Exists
NPUT Ra,FSLx01101100000Ra1100000000000 &
FSLx
CGET Rd,FSLx011011Rd000000010000000000 &
FSLx
CPUT Ra,FSLx01101100000Ra1010000000000 &
FSLx := Ra (non-blocking data write)
MSR[C] := FSLx_M_Full
Rd := FSLx (blocking control read)
MSR[FSL] := 1 if (FSLx_S_Control = 0)
FSLx := Ra (blocking control write)
FSLx
NCGET Rd,FSLx011011Rd000000110000000000 &
FSLx
Rd := FSLx (non-blocking control read)
MSR[FSL] := 1 if (FSLx_S_Control = 0)
MSR[C] := not FSLx_S_Exists
NCPUT Ra,FSLx01101100000Ra1110000000000 &
FSLx
FSLx := Ra (non-blocking control write)
MSR[C] := FSLx_M_Full
OR Rd,Ra,Rb100000RdRaRb00000000000Rd := Ra or Rb
AND Rd,Ra,Rb100001RdRaRb00000000000Rd := Ra and Rb
XOR Rd,Ra,Rb100010RdRaRb00000000000Rd := Ra xor Rb
ANDN Rd,Ra,Rb100011RdRaRb00000000000Rd := Ra and
Rb
PCMPBF Rd,Ra,Rb100000RdRaRb10000000000Rd := 1 if (Rb[0:7] = Ra[0:7]) else
MSR := MSR or Imm14
BR Rb1001100000000000Rb00000000000PC := PC + Rb
BRD Rb1001100000010000Rb00000000000PC := PC + Rb
BRLD Rd,Rb100110Rd10100Rb00000000000PC := PC + Rb
Rd := PC
BRA Rb1001100000001000Rb00000000000PC := Rb
BRAD Rb1001100000011000Rb00000000000PC := Rb
BRALD Rd,Rb100110Rd11100Rb00000000000PC := Rb
Rd := PC
BRK Rd,Rb100110Rd01100Rb00000000000PC := Rb
Rd := PC
MSR[BIP] := 1
BEQ Ra,Rb10011100000RaRb00000000000PC := PC + Rb if Ra = 0
BNE Ra,Rb10011100001RaRb00000000000PC := PC + Rb if Ra != 0
BLT Ra,Rb10011100010RaRb00000000000PC := PC + Rb if Ra < 0
BLE Ra,Rb10011100011RaRb00000000000PC := PC + Rb if Ra <= 0
BGT Ra,Rb10011100100RaRb00000000000PC := PC + Rb if Ra > 0
BGE Ra,Rb10011100101RaRb00000000000PC := PC + Rb if Ra >= 0
BEQD Ra,Rb10011110000RaRb00000000000PC := PC + Rb if Ra = 0
BNED Ra,Rb10011110001RaRb00000000000PC := PC + Rb if Ra != 0
BLTD Ra,Rb10011110010RaRb00000000000PC := PC + Rb if Ra < 0
BLED Ra,Rb10011110011RaRb00000000000PC := PC + Rb if Ra <= 0
Table 1-6:MicroBlaze Instruction Set Summary (Continued)
Type A0-56-1011-15 16-2021-31
Semantics
Type B0-56-1011-1516-31
BGTD Ra,Rb10011110100RaRb00000000000PC := PC + Rb if Ra > 0
BGED Ra,Rb10011110101RaRb00000000000PC := PC + Rb if Ra >= 0
ORI Rd,Ra,Imm101000RdRaImmRd := Ra or s(Imm)
ANDI Rd,Ra,Imm101001RdRaImmRd := Ra and s(Imm)
XORI Rd,Ra,Imm101010RdRaImmRd := Ra xor s(Imm)
R
ANDNI Rd,Ra,Imm101011RdRaImmRd := Ra and
s(Imm)
IMM Imm1011000000000000ImmImm[0:15] := Imm
RTSD Ra,Imm10110110000RaImmPC := Ra + s(Imm)
RTID Ra,Imm10110110001RaImmPC := Ra + s(Imm)
MSR[IE] := 1
RTBD Ra,Imm10110110010RaImmPC := Ra + s(Imm)
MSR[BIP] := 0
RTED Ra,Imm10110110100RaImmPC := Ra + s(Imm)
MSR[EE] := 1
MSR[EIP] := 0
ESR := 0
BRI Imm1011100000000000ImmPC := PC + s(Imm)
BRID Imm1011100000010000ImmPC := PC + s(Imm)
BRLID Rd,Imm101110Rd10100ImmPC := PC + s(Imm)
MSR[BIP] := 1
BEQI Ra,Imm10111100000RaImmPC := PC + s(Imm) if Ra = 0
BNEI Ra,Imm10111100001RaImmPC := PC + s(Imm) if Ra != 0
BLTI Ra,Imm10111100010RaImmPC := PC + s(Imm) if Ra < 0
BLEI Ra,Imm10111100011RaImmPC := PC + s(Imm) if Ra <= 0
BGTI Ra,Imm10111100100RaImmPC := PC + s(Imm) if Ra > 0
BGEI Ra,Imm10111100101RaImmPC := PC + s(Imm) if Ra >= 0
BEQID Ra,Imm10111110000RaImmPC := PC + s(Imm) if Ra = 0
BNEID Ra,Imm10111110001RaImmPC := PC + s(Imm) if Ra != 0
BLTID Ra,Imm10111110010RaImmPC := PC + s(Imm) if Ra < 0
Table 1-6:MicroBlaze Instruction Set Summary (Continued)
Type A0-56-1011-15 16-2021-31
Semantics
Type B0-56-1011-1516-31
BLEID Ra,Imm10111110011RaImmPC := PC + s(Imm) if Ra <= 0
BGTID Ra,Imm10111110100RaImmPC := PC + s(Imm) if Ra > 0
BGEID Ra,Imm10111110101RaImmPC := PC + s(Imm) if Ra >= 0
LBU Rd,Ra,Rb110000RdRaRb00000000000Addr := Ra + Rb
Rd[0:23] := 0
Rd[24:31] := *Addr[0:7]
LHU Rd,Ra,Rb110001RdRaRb00000000000Addr := Ra + Rb
Rd[0:15] := 0
Rd[16:31] := *Addr[0:15]
LW Rd,Ra,Rb110010RdRaRb00000000000Addr := Ra + Rb
Rd := *Addr
SB Rd,Ra,Rb110100RdRaRb00000000000Addr := Ra + Rb
*Addr[0:8] := Rd[24:31]
SH Rd,Ra,Rb110101RdRaRb00000000000Addr := Ra + Rb
*Addr[0:16] := Rd[16:31]
SW Rd,Ra,Rb110110RdRaRb00000000000Addr := Ra + Rb
*Addr := Rd
LBUI Rd,Ra,Imm111000RdRaImmAddr := Ra + s(Imm)
Rd[0:23] := 0
Rd[24:31] := *Addr[0:7]
LHUI Rd,Ra,Imm111001RdRaImmAddr := Ra + s(Imm)
Rd[0:15] := 0
Rd[16:31] := *Addr[0:15]
LWI Rd,Ra,Imm111010RdRaImmAddr := Ra + s(Imm)
Rd := *Addr
SBI Rd,Ra,Imm111100RdRaImmAddr := Ra + s(Imm)
*Addr[0:7] := Rd[24:31]
SHI Rd,Ra,Imm111101RdRaImmAddr := Ra + s(Imm)
*Addr[0:15] := Rd[16:31]
SWI Rd,Ra,Imm111110RdRaImmAddr := Ra + s(Imm)
*Addr := Rd
1. Due to the many differentcorner cases involved in floating point arithmetic, only the normal behavior is described. A full description
of the behavior can be found in: Chapter 4, “MicroBlaze Instruction Set Architecture,”
Registers
MicroBlaze has an orthogonal instruction set architecture. It has thirty-two 32-bit general
purpose registers and up to seven 32-bit special purpose registers, depending on
configured options.
The thirty-two 32-bit General Purpose Registers are numbered R0 through R31. The
register file is reset on bit stream download (reset value is 0x00000000).
Note: The register file is not reset by the external reset inputs: reset and debug_rst.
031
↑
R0-R31
Figure 1-2:R0-R31
Table 1-7:General Purpose Registers (R0-R31)
BitsNameDescriptionReset Value
R
0:31R0R0 is defined to always have thevalue
0x00000000
of zero. Anything written to R0 is
discarded.
0:31R1 through R13R1 through R13 are 32-bit general
-
purpose registers
0:31R1432-bit used to store return addresses
-
for interrupts
0:31R1532-bit general purpose register0:31R1632-bit used to store return addresses
-
for breaks
0:31R17
0:31R18 through R31R18 through R31 are 32-bit general
If MicroBlaze is configured to support
hardware exceptions, this register is
loaded with HW exception return
address (see also “Branch Target
Register (BTR)”); if not it is a general
purpose register
-
-
purpose registers.
Please refer to Table 3-2 for software conventions on general purpose register usage.
Special Purpose Registers
Program Counter (PC)
The Program Counter is the 32-bit address of the execution instruction. It can be read with
an MFS instruction, but it can not be written to using an MTS instruction. When used with
the MFS instruction the PC register is specified by setting Sa = 0x0000.
Address of executing instruction,
i.e. “mfs r2 0” will store the address
of the mfs instruction itself in R2
Machine Status Register (MSR)
The Machine Status Register contains control and status bits for the processor. It can be
read with an MFS instruction. When reading the MSR, bit 29 is replicated in bit 0 as the
carry copy. MSR can be written using either an MTS instruction or the dedicated MSRSET
and MSRCLR instructions.
When writing to the MSR, some of the bits will takes effect immediately (e.g Carry) and the
remaining bits take effect one clock cycle later. Any value written to bit 0 is discarded.
When used with an MTS or MFS instruction the MSR is specified by setting Sx = 0x0001.
021 22 23 24 25 26 27 28 29 30 31
↑↑↑↑↑↑ ↑↑↑↑↑↑↑
CCRESERVEDPVR EIP EE DCE DZ ICE FSL BIP C IE BE
Figure 1-4:MSR
Table 1-9:Machine Status Register (MSR)
BitsNameDescriptionReset Value
0CC
Arithmetic Carry Copy
0
Copy of the Arithmetic Carry (bit 29).
CC is always the same as bit C.
1:20Reserved
21PVR
Table 1-9:Machine Status Register (MSR) (Continued)
BitsNameDescriptionReset Value
29C
Arithmetic Carry
0
0 No Carry (Borrow)
1 Carry (No Borrow)
Read/Write
30IE
Interrupt Enable
0
0 Interrupts disabled
1 Interrupts enabled
Read/Write
31BE
Buslock Enable
2
0
0 Buslock disabled on data-side OPB
1 Buslock enabled on data-side OPB
Buslock Enable does not affect
operation of IXCL, DXCL, ILMB,
DLMB, or IOPB.
Read/Write
1. This bit is only used for integer divide-by-zero signaling. There is a floating point equivalent
in the FSR. The DZ-bit will flag divide by zero conditions regardless if the processor is
configured with exception handling or not.
2. For a details on the OPB protocol, please refer to the IBM CoreConnect specification: 64-BitOn-Chip Peripheral Bus, Architectural Specifications, Version 2.0.
Exception Address Register (EAR)
The Exception Address Register stores the full load/store address that caused the
exception. For an unaligned access exception that means the unaligned access address,and
for an DOPB exception, the failing OPB data access address. The contents of this register is
undefined for all other exceptions. When read with the MFS instruction the EAR is
specified by setting Sa = 0x0003.
The Exception Status Register contains status bits for the processor. When read with the
MFS instruction the ESR is specified by setting Sa = 0x0005.
19 2026 2731
↑↑↑↑
RESERVED
Figure 1-6:ESR
Table 1-11:Exception Status Register (ESR)
BitsNameDescriptionReset Value
0:18Reserved
DS
ESSEC
R
19DS
20:26ESS
27:31EC
Exception in delay slot.
0 not caused by delay slot instruction
1 caused by delay slot instruction
Read-only
Exception Specific Status
For details refer to Table 1-12.
Read-only
Exception Cause
00001 = Unaligned data access exception
00010 = Illegal op-code exception
00011 = Instruction bus error exception
00100 = Data bus error exception
00101 = Divide by zero exception
00110 = Floating point unit exception
0 unaligned halfword access
1 unaligned word access
21SStore Access Exception
0 unaligned load access
1 unaligned store access
22:26Rx
Source/Destination Register
General purpose register used
as source (Store) or destination
(Load) in unaligned access
20:26Reserved0
20:26Reserved0
20:26Reserved0
20:26Reserved0
20:26Reserved0
0
0
0
Branch Target Register (BTR)
The Branch Target Register only exists if the MicroBlaze processor is configured to use
exceptions. The register stores the branch target address for all delay slot branch
instructions executed while MSR[EIP] = 0. If an exception is caused by an instruction in a
delay slot (i.e. ESR[DS]=1) then the exception handler should return execution to the
address stored in BTR instead of the normal exception return address stored in r17. When
read with the MFS instruction the BTR is specified by setting Sa = 0x000B.
0x00000000
when returning from an exception
caused by an instruction in a delay slot
Read-only
Floating Point Status Register (FSR)
The Floating Point Status Register contains status bits for the floating point unit. It can be
read with an MFS, and written with an MTS instruction. When read or written, the register
is specified by setting Sa = 0x0007.
The Processor Version Register is controlled by the C_PVR configuration option on
MicroBlaze. When C_PVR is set to 0 the processor does not implement any PVR and
MSR[PVR]=0. If C_PVR is set to 1 then MicroBlaze implements only the first register:
PVR0, and if set to 2 all 12 PVR registers (PVR0 to PVR11) are implemented.
When read with the MFS instruction the PVR is specified by setting Sa = 0x200x, with x
being the register number between 0x0 and 0xB.
1=full
1BSUse barrel shifterC_USE_BARREL
2DIVUse dividerC_USE_DIV
3MULUse hardware multiplierC_USE_HW_MUL
4FPUUse FPUC_USE_FPU
5EXCUse any type of exceptionsBased on C_*_EXCEPTION
6ICUUse instruction cacheC_USE_ICACHE
7DCUUse data cacheC_USE_DCACHE
8:15Reserved0
16:23MBVMicroBlaze release version code
Release Specific
0x1 = v5.00.a
24:31USR1User configured value 1C_PVR_USER1
Table 1-16:Processor Version Register 1 (PVR1)
BitsNameDescriptionValue
0:31USR2User configured value 2C_PVR_USER2
Table 1-17:Processor Version Register 2 (PVR2)
BitsNameDescriptionValue
0DOPBData side OPB in useC_D_OPB
1DLMBData side LMB in useC_D_LMB
2IOPBInstruction side OPB in useC_I_OPB
3IOPBInstruction side OPB in useC_I_LMB
4IRQEDGEInterrupt is edge triggeredC_INTERRUPT_IS_EDGE
5IRQPOSInterrupt edge is positiveC_EDGE_IS_POSITIVE
6:16Reserved
17BSUse barrel shifterC_USE_BARREL
18DIVUse dividerC_USE_DIV
19MULUse hardware multiplierC_USE_HW_MUL
20FPUUse FPUC_USE_FPU
21:24Reserved