Subfunction calls – Altera Nios II C2H Compiler User Manual

Page 81

Advertising
background image

Altera Corporation

9.1

3–41

November 2009

Nios II C2H Compiler User Guide

C-to-Hardware Mapping Reference

If multiple loops have no interdependencies, the C2H Compiler
schedules the loops on the same state, allowing the loops to execute in
parallel. The code in

Example 3–34

has two

while

loops with no

dependencies on each other. The C2H Compiler schedules these loops on
the same state.

Example 3–34. Loops Without Interdependencies Scheduled in Parallel

void double_mac (int* _ _ restrict_ _ a, int* _ _ restrict_ _ b,
int* _ _ restrict_ _ c, int* _ _ restrict_ _ d,
long long* _ _ restrict_ _ res_ab,
long long* _ _ restrict_ _ res_cd,
int len)
{
int len_cd = len; // duplicate the length index
// Compute the MAC for a & b
long long mac_ab = 0;
while (len_ab > 0)
{
mac_ab += *a++ * *b++;
len_ab--;
}
// Compute the MAC for c & d
long long mac_cd = 0;
while (len_cd > 0)
{
mac_cd += *c++ * *d++;
len_cd--;
}
*res_ab = mac_ab;
*res_cd = mac_cd;
return;
}

Subfunction Calls

A subfunction call can stall the state machine in the same way that an
inner loop does. When a subfunction contains a looping structure or
shares a data dependency with its caller, the subfunction is not pipelined.
If this is the case, when the outer state machine reaches its state for the
subfunction, the outer state machine stalls until the subfunction has
completed.

If the subfunction does not contain loops or shared data dependencies the
C2H Compiler can pipeline the subfunction. For details about pipelined
subfunctions, see

“Subfunction Pipelining” on page 3–49

.

Advertising