Macros and preprocessing directives, Variable declarations, Local vs. non-local variables – Altera Nios II C2H Compiler User Manual

Page 53: Variable declarations –13

Advertising
background image

Altera Corporation

9.1

3–13

November 2009

Nios II C2H Compiler User Guide

C-to-Hardware Mapping Reference

The Nios II C2H Compiler does not perform any type of inline
substitution. It ignores the

inline

function specifier. You can achieve the

effect of an

inline

function through the use of preprocessing macros. If

you wish to call a function for which accelerated hardware is replicated
for each call, then you must define a macro containing the logic for this
function. Before parsing the accelerated code, the C2H Compiler calls the
GNU GCC preprocessor, which evaluates the macro and replaces each
macro call with your macro definition.

Macros and Preprocessing Directives

Any preprocessing directives in your code are processed before
translation to hardware. In order to ensure identical interpretation
between software and hardware, the C2H Compiler operates on the
output of the nios2-elf-gcc preprocessor.

Variable
Declarations

This section describes how the C2H Compiler translates variable
declarations and other C elements that define data storage.

Local vs. Non-Local Variables

The C2H Compiler treats variables differently, depending on the scope of
the variable. In general, local variables translate to memory elements
inside the accelerator hardware; non-local variables translate to Avalon-
MM master ports capable of accessing memory outside of the accelerator.

For the purposes of this document, any variable declared within the scope
of an accelerated function is considered to be local.

Example 3–4

illustrates locality of variables to a function

mac()

. In this example, only

int my_global

is not local, and all other variables are local.

Example 3–4. Local vs. Non-Local Variables

int my_global; // my_global is not local to mac().
int mac(int *src, int *dst, int len)
// src, dst, and len are local to mac().
{
int res = 0; // res is local to mac().
while (len--)
{
int product = (*src++) * (*dst++); // product is local to mac().
res += product;
}
return res;
}

Advertising