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
On the Convert to Fixed Point page, to open the Settings dialog box, click the Settings arrow .
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
Create a fixed-point code configuration object:
cfg = coder.config('fixpt');
Set the
HighlightPotentialDataTypeIssues
property of the configuration object totrue
.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.