2.3.3.1. Floating Point Custom Instruction 2 Component
- Add
- Subtract
- Multiply
- Divide
- Square root
- Comparison
- Integer conversion
- Minimum
- Maximum
- Negate
- Absolute
Other floating-point operations (including double-precision operations) are implemented with software emulation. The component requires the following device resources:
- ~2,500 4-input LEs
- 9 x 9 bit multipliers
- 3x M9K memories
In the following table, a and b are assumed to be single-precision floating-point values.
| Operation 2 | N 3 | Cycles | Result | Subnormal | Rounding | GCC Inference |
|---|---|---|---|---|---|---|
| fdivs | 255 | 16 | a ÷ b | Flush to 0 | Nearest | a / b |
| fsubs | 254 | 5 | a – b | Flush to 0 | Faithful | a – b |
| fadds | 253 | 5 | a + b | Flush to 0 | Faithful | a + b |
| fmuls | 252 | 4 | a x b | Flush to 0 | Faithful | a * b |
| fsqrts | 251 | 8 | Flush to 0 | Faithful | sqrtf() 4 | |
| floatis | 250 | 4 | int_to_float(a) | Not applicable | Not applicable | Casting |
| fixsi | 249 | 2 | float_to_int(a) | Flush to 0 | Truncation | Casting |
| round | 248 | 2 | float_to_int(a) | Flush to 0 | Nearest | lroundf()4 |
| Reserved | 234 to 247 | Undefined | Undefined | |||
| fmins | 233 | 1 | (a < b) ? a : b | Supported | None | fminf()4 |
| fmaxs | 232 | 1 | (a < b) ? b : a | Supported | None | fmaxf()4 |
| fcmplts | 231 | 1 | (a < b) ? 1 : 0 | Supported | None | a < b |
| fcmples | 230 | 1 | (a ≤ b) ? 1 : 0 | Supported | None | a <= b |
| fcmpgts | 229 | 1 | (a > b) ? 1 : 0 | Supported | None | a > b |
| fcmpges | 228 | 1 | (a ≥ b) ? 1 : 0 | Supported | None | a >= b |
| fcmpeqs | 227 | 1 | (a = b) ? 1 : 0 | Supported | None | a == b |
| fcmpnes | 226 | 1 | (a ≠ b) ? 1 : 0 | Supported | None | a != b |
| fnegs | 225 | 1 | -a | Supported | None | -a |
| fabss | 224 | 1 | |a| | Supported | None | fabsf() |
The cycles column specifies the number of cycles required to execute the instruction. A combinatorial custom instruction takes 1 cycle. A multi-cycle custom instruction requires at least 2 cycles. An N-cycle multi-cycle custom instruction has N - 2 register stages inside the custom instruction because the Nios II processor registers the result from the custom instruction and allows another cycle for g wire delays in the source operand bypass multiplexers. The number of cycles does not include the extra cycles (maximum of 2) that an instruction following the multi-cycle custom instruction is stalled by the Nios II/f if the instruction uses the result within 2 cycles. These extra cycles occur because multi-cycle instructions are late result instructions
In Qsys, the Floating Point Hardware 2 component is under Embedded Processors on the Component Library tab.
The Nios II Software Build Tools (SBT) include software support for the Floating Point Custom Instruction 2 component. When the Floating Point Custom Instruction 2 component is present in hardware, the Nios II compiler compiles the software codes to use the custom instructions for floating point operations.