Visible to Intel only — GUID: lro1431975916134
Ixiasoft
Visible to Intel only — GUID: lro1431975916134
Ixiasoft
6.1. Overview of the Floating Point Hardware 2 Component
- altera_nios_custom_instr_floating_point_2_combi
- altera_nios_custom_instr_floating_point_2_multi
- Supports FPH1 operations (add, sub, multiply, divide) and adds support for square root, comparisons, integer conversions, minimum, maximum, negate, and absolute
- Single-precision floating point values are stored in the Nios II general purpose registers
- VHDL only
- Platform Designer support only
- Single-precision only
- Optimized for FPGAs with 4-input LEs and 18-bit multipliers
- GCC and Nios II SBT (Software Build Tools) software support
- IEEE 754-2008 compliant except for:
- Simplified rounding
- Simplified NaN handling
- No exceptions
- No status flags
- Subnormal supported on a subset of operations
- Binary-compatibility with FPH1
- FPH1 implements Round-To-Nearest rounding. Because FPH2 implements different rounding, results might be subtly different between the two generations
- Resource consumption in a typical system:
- Approximately 2500 4-input LEs
- Nine 9-bit multipliers
- Three M9K memories or larger
In Platform Designer, the Floating Point Hardware 2 component is under Embedded Processors on the Component Library tab.
Operation 4 | N 5 | 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 | Faithful | sqrtf() 6 | ||
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()6 |
Reserved | 234 to 247 | Undefined | Undefined | |||
fmins | 233 | 1 | (a < b) ? a : b | Supported | None | fminf()6 |
fmaxs | 232 | 1 | (a < b) ? b : a | Supported | None | fmaxf() 6 |
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
The Nios II Software Build Tools (SBT) include software support for the FPH2 component. When the FPH2 component is present in hardware, the Nios II compiler compiles the software codes to use the custom instructions for floating point operations.