pragma SDS data access_pattern

Description

This pragma must be specified immediately preceding a function declaration, or immediately preceding another#pragma SDSbound 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 isSEQUENTIAL, a streaming interface (such asap_fifo) will be generated. Otherwise, withRANDOMaccess pattern, a RAM interface will be generated.SeeData Motion Network Generation in SDSoCfor 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:)
Where:
  • ArrayName: Specifies one of the formal parameters of the function to assign the pragma to.
  • can be eitherSEQUENTIALorRANDOM. The default isRANDOM.

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 argumentA, while a RAM interface will be generated for argumentB. The access pattern for argumentAmust be A[0], A[1], A[2], ... , A[1023], and all elements must be accessed only once. On the other hand, argumentBcan 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 argumentAis intended to be a streaming port, the two pragmas shown must be applied. Without these, SDSoC synthesizes argumentAas a register (IN, OUT, or INOUT based on the usage ofAin functionfoo).

Example 3

The following code snippet shows the combination of the zero_copypragma and the access_patternpragma:
#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, theaccess_patternpragma is ignored. After thezero_copypragma is applied to an argument, an AXI Master interface will be synthesized for that argument.SeeZero Copy Data Moverfor more information.

See Also