Main Content

Generate Fixed-Point C Code

Note

To generate fixed-point code from MATLAB® you must have both the Fixed-Point Designer™ product and the MATLAB Coder™ product. You also must have a C compiler.

This example shows how to generate code for a simple function that multiplies and accumulates two input values. This is the type of code that you could embed in external hardware. The function is

function acc = mult_acc(x,a,acc)
acc = accumpos(acc,x*a); 

This code defines the test bench inputs, sets up the required code generation properties, and generates the code. The test bench inputs are specified as fixed-point numbers. The x input is a random number, a is 0.9, and the accumulator, acc, is initialized to 0. The coder.HardwareImplementation object specifies properties of the external hardware that impact the generated code. The examples specifies a 40-bit accumulator. The coder.CodeConfig object has properties that directly affect code generation. The codegen command takes the function, the configuration object as the input arguments and generates embeddable C code.

x = fi(rand,true,16,15);
a = fi(0.9,true,16,15);
acc = fi(0,true,40,30);


%% 
hi = coder.HardwareImplementation;
hi. ProdHWDeviceType = 'Generic->Custom'
hi. TargetHWDeviceType = 'Generic->Custom'
hi.TargetBitPerLong = 40;
hi.ProdBitPerLong   = 40;

hc = coder.config('lib');
hc.HardwareImplementation = hi;
hc.GenerateReport         = true;

codegen mult_acc -config hc -args {x,a,acc}

The generated C code is:

/* Include Files */
#include "mult_acc.h"

/* Function Definitions */

/*
 * Arguments    : short x
 *                short a
 *                long *acc
 * Return Type  : void
 */
void mult_acc(short x, short a, long *acc)
{
  *acc += x * a;
}

Note

For a list of functions supported for code generation, see Functions and Objects Supported for C/C++ Code Generation.