AI Engine Intrinsics User Guide (AIE) v2024.2
|
FFT addressing intrinsics .
Data pointer increment functions | |
v2cint32 * | fft_data_incr (v2cint32 *ptr, int range, v2cint32 *&target, umod_t &cntwrap) |
Increment the FFT data pointer. | |
v8cint16 * | fft_data_incr (v8cint16 *ptr, int range, v8cint16 *&target, umod_t &cntwrap) |
Increment the FFT data pointer. | |
v4cint16 * | fft_data_incr (v4cint16 *ptr, int range, v4cint16 *&target, umod_t &cntwrap) |
Increment the FFT data pointer. | |
v4cfloat * | fft_data_incr (v4cfloat *ptr, int range, v4cfloat *&target, umod_t &cntwrap) |
Increment the FFT data pointer. | |
v2cfloat * | fft_data_incr (v2cfloat *ptr, int range, v2cfloat *&target, umod_t &cntwrap) |
Increment the FFT data pointer. | |
Data pointer increment functions without cntwrap return value | |
v4cint32 * | fft_data_incr (v4cint32 *ptr, int range, v4cint32 *&target) |
Iterate over the FFT input values. | |
v2cint32 * | fft_data_incr (v2cint32 *ptr, int range, v2cint32 *&target) |
Iterate over the FFT input values. | |
v8cint16 * | fft_data_incr (v8cint16 *ptr, int range, v8cint16 *&target) |
Iterate over the FFT input values. | |
v4cint16 * | fft_data_incr (v4cint16 *ptr, int range, v4cint16 *&target) |
Iterate over the FFT input values. | |
v4cfloat * | fft_data_incr (v4cfloat *ptr, int range, v4cfloat *&target) |
Iterate over the FFT input values. | |
v2cfloat * | fft_data_incr (v2cfloat *ptr, int range, v2cfloat *&target) |
Iterate over the FFT input values. | |
Twiddle factor increment functions | |
void * | fft_twiddle_incr_inl (void *ptr, int bytes, umod_t cntwrap, int step) |
Increment the twiddle factor pointer. | |
#define | fft_twiddle_incr(ptr, cntwrap, step) fft_twiddle_incr_inl((ptr), 1, (cntwrap), (step)) |
Increment the twiddle factor pointer. | |
#define fft_twiddle_incr | ( | ptr, | |
cntwrap, | |||
step | |||
) | fft_twiddle_incr_inl((ptr), 1, (cntwrap), (step)) |
Increment the twiddle factor pointer.
cntwrap | Contains the block wrap (cntwrap[19]) and the count of previous wraps (cntwrap[2:0]) |
ptr | Pointer to the current twiddle vector. |
step | Binary logarithm of the number of wraps per pointer increment. Must be a compile-time constant. |
This function is called within every stage of the Stockham FFT algorithm in order to get a new set of twiddle values.
The internal logic of this function can be thought of as the following:
v2cfloat * fft_data_incr | ( | v2cfloat * | ptr, |
int | range, | ||
v2cfloat *& | target | ||
) |
Iterate over the FFT input values.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v2cfloat * fft_data_incr | ( | v2cfloat * | ptr, |
int | range, | ||
v2cfloat *& | target, | ||
umod_t & | cntwrap | ||
) |
Increment the FFT data pointer.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
cntwrap | Wrap bit (cntwrap[19]) and wrap counter (cntwrap[2:0]) |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v2cint32 * fft_data_incr | ( | v2cint32 * | ptr, |
int | range, | ||
v2cint32 *& | target | ||
) |
Iterate over the FFT input values.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v2cint32 * fft_data_incr | ( | v2cint32 * | ptr, |
int | range, | ||
v2cint32 *& | target, | ||
umod_t & | cntwrap | ||
) |
Increment the FFT data pointer.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
cntwrap | Wrap bit (cntwrap[19]) and wrap counter (cntwrap[2:0]) |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v4cfloat * fft_data_incr | ( | v4cfloat * | ptr, |
int | range, | ||
v4cfloat *& | target | ||
) |
Iterate over the FFT input values.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v4cfloat * fft_data_incr | ( | v4cfloat * | ptr, |
int | range, | ||
v4cfloat *& | target, | ||
umod_t & | cntwrap | ||
) |
Increment the FFT data pointer.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
cntwrap | Wrap bit (cntwrap[19]) and wrap counter (cntwrap[2:0]) |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v4cint16 * fft_data_incr | ( | v4cint16 * | ptr, |
int | range, | ||
v4cint16 *& | target | ||
) |
Iterate over the FFT input values.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v4cint16 * fft_data_incr | ( | v4cint16 * | ptr, |
int | range, | ||
v4cint16 *& | target, | ||
umod_t & | cntwrap | ||
) |
Increment the FFT data pointer.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
cntwrap | Wrap bit (cntwrap[19]) and wrap counter (cntwrap[2:0]) |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v4cint32 * fft_data_incr | ( | v4cint32 * | ptr, |
int | range, | ||
v4cint32 *& | target | ||
) |
Iterate over the FFT input values.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v8cint16 * fft_data_incr | ( | v8cint16 * | ptr, |
int | range, | ||
v8cint16 *& | target | ||
) |
Iterate over the FFT input values.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
v8cint16 * fft_data_incr | ( | v8cint16 * | ptr, |
int | range, | ||
v8cint16 *& | target, | ||
umod_t & | cntwrap | ||
) |
Increment the FFT data pointer.
ptr | Pointer to the input vector |
range | Size of the block of vectors to iterate over between jumps |
target | Pointer to the end of the consecutive block |
cntwrap | Wrap bit (cntwrap[19]) and wrap counter (cntwrap[2:0]) |
This function enables the iteration of the pointer that is the current target of the butterfly operation. If this pointer becomes equal to the target i.e. reaches the end of the wrap, it skips the appropriate distance (the range) and begins to iterate towards a newly assigned target. The pseudocode showing this logic can be seen below:
void * fft_twiddle_incr_inl | ( | void * | ptr, |
int | bytes, | ||
umod_t | cntwrap, | ||
int | step | ||
) |
Increment the twiddle factor pointer.
cntwrap | Contains the block wrap (cntwrap[19]) and the count of previous wraps (cntwrap[2:0]) |
ptr | Pointer to the current twiddle vector. |
step | Binary logarithm of the number of wraps per pointer increment. Must be a compile-time constant. |
This function is called within every stage of the Stockham FFT algorithm in order to get a new set of twiddle values.
The internal logic of this function can be thought of as the following: