Nios II Classic Processor Reference Guide

ID 683620
Date 10/28/2016
Public
Document Table of Contents

2.3.3.1. Floating Point Custom Instruction 2 Component

You can add floating-point custom instructions to any Nios II processor design. The floating-point division hardware requires more resources than the other instructions. The Floating Point Hardware 2 component supports the following single-precision floating-point operations:
  • 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.

Table 4.  Floating Point Custom Instruction 2 Operation Summary
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.

2 These names match the names of the corresponding GCC command-line options except for round, which GCC does not support.
3 Specifies the 8 bit fixed custom instruction for the operation.
4 Nios II GCC version 4.7.3 is not able to reliably replace calls to newlib floating-point functions with the equivalent custom instruction even though it has -mcustom-<operation> command-line options and pragma support for these operations. Instead, the custom instruction must be invoked directly using the GCC __builtin_custom_* facility. The Floating Point Custom Instruction 2 component includes a C header file that provides the required #define macros to invoke the custom instruction directly.