pragma SDS data access_pattern
Description
This pragma must be specified immediately preceding a
function declaration, or immediately preceding
another #pragma SDS
bound to the
function declaration.
This pragma specifies the data access pattern in the hardware
function. SDSoC checks the value of this pragma to determine the hardware interface to
synthesize. If the access pattern is SEQUENTIAL
, a streaming interface
(such as ap_fifo
) will be generated. Otherwise, with
RANDOM
access pattern, a RAM interface will be generated. Refer to "Data
Motion Network Generation in SDSoC" in SDSoC Environment User Guide (UG1027) for more information on the use of this
pragma in data motion network generation.
Syntax
#pragma SDS data access_pattern(ArrayName:<pattern>)
ArrayName
: Specifies one of the formal parameters of the function to assign the pragma to.- <pattern> can be either
SEQUENTIAL
orRANDOM
. The default isRANDOM
.
Example 1
A
):#pragma SDS data access_pattern(A:SEQUENTIAL)
void foo(int A[1024], int B[1024])
In the example shown above, a streaming interface will be generated for
argument A
, while a RAM interface will be generated for argument
B
. The access pattern for argument A
must be A[0], A[1],
A[2], ... , A[1023], and all elements must be accessed only once. On the other hand,
argument B
can be accessed in a random fashion, and each element can be
accessed zero or more times.
Example 2
#pragma SDS data access_pattern(A:SEQUENTIAL)
#pragma SDS data copy(A[0:1024])
void foo(int *A, int B[1024])
In the above example, if argument A
is
intended to be a streaming port, the two pragmas
shown must be applied. Without these, SDSoC
synthesizes argument A
as a
register (IN, OUT, or INOUT based on the usage of
A
in function
foo
).
Example 3
zero_copy
pragma
and the access_pattern
pragma:#pragma SDS data zero_copy(A)
#pragma SDS data access_pattern(A:SEQUENTIAL)
void foo(int A[1024], int B[1024])
In the above example, the access_pattern
pragma is ignored. After the zero_copy
pragma is applied to an argument, an
AXI Master interface will be synthesized for that argument. Refer to "Zero Copy Data
Mover" in SDSoC Environment User Guide (UG1027) for more information.