Main Content

Data Type Issues in Generated Code

Within the fixed-point conversion report, you have the option to highlight MATLAB® code that results in double, single, or expensive fixed-point operations. Consider enabling these checks when trying to achieve a strict single, or fixed-point design.

These checks are disabled by default.

Enable the Highlight Option in the MATLAB Coder App

  1. On the Convert to Fixed Point page, to open the Settings dialog box, click the Settings arrow .

  2. Under Plotting and Reporting, set Highlight potential data type issues to Yes.

When conversion is complete, open the fixed-point conversion report to view the highlighting. Click View report in the Type Validation Output tab.

Enable the Highlight Option at the Command Line

  1. Create a fixed-point code configuration object:

    cfg = coder.config('fixpt');

  2. Set the HighlightPotentialDataTypeIssues property of the configuration object to true.

    cfg.HighlightPotentialDataTypeIssues = true;

Stowaway Doubles

When trying to achieve a strict-single or fixed-point design, manual inspection of code can be time-consuming and error prone. This check highlights all expressions that result in a double operation.

For a strict-single precision design, specify a language standard that supports single-precision implementations. To change the library for a project, during the Generate Code step, in the project settings dialog box, on the Custom Code tab, set the Language standard to C99 (ISO).

Stowaway Singles

This check highlights all expressions that result in a single operation.

Expensive Fixed-Point Operations

The expensive fixed-point operations check identifies optimization opportunities for fixed-point code. It highlights expressions in the MATLAB code that require cumbersome multiplication or division, expensive rounding, expensive comparison, or multiword operations. For more information on optimizing generated fixed-point code, see Tips for Making Generated Code More Efficient (Fixed-Point Designer).

Cumbersome Operations

Cumbersome operations most often occur due to insufficient range of output. Avoid inputs to a multiply or divide operation that has word lengths larger than the base integer type of your processor. Operations with larger word lengths can be handled in software, but this approach requires much more code and is much slower.

Expensive Rounding

Traditional handwritten code, especially for control applications, almost always uses "no effort" rounding. For example, for unsigned integers and two's complement signed integers, shifting right and dropping the bits is equivalent to rounding to floor. To get results comparable to, or better than, what you expect from traditional handwritten code, use the floor rounding method. This check identifies expensive rounding operations in multiplication and division.

Expensive Comparison Operations

Comparison operations generate extra code when a casting operation is required to do the comparison. For example, when comparing an unsigned integer to a signed integer, one of the inputs must first be cast to the signedness of the other before the comparison operation can be performed. Consider optimizing the data types of the input arguments so that a cast is not required in the generated code.

Multiword Operations

Multiword operations can be inefficient on hardware. When an operation has an input or output data type larger than the largest word size of your processor, the generated code contains multiword operations. You can avoid multiword operations in the generated code by specifying local fimath properties for variables. You can also manually specify input and output word lengths of operations that generate multiword code.