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. See Data Motion Network Generation in SDSoC for more information on the use of this pragma in data motion network generation.

Syntax

The syntax for this pragma is:
#pragma SDS data access_pattern(ArrayName:<pattern>)
Where:
  • ArrayName: Specifies one of the formal parameters of the function to assign the pragma to.
  • <pattern> can be either SEQUENTIAL or RANDOM. The default is RANDOM.

Example 1

The following code snippet shows an example of using this pragma for the array argument (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

The following code snippet shows an example of using this pragma for a pointer argument:
#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

The following code snippet shows the combination of the 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. See Zero Copy Data Mover for more information.

See Also