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

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.
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;
}