Reloadable Coefficients - Array Dimensions for SSR Cases - 2024.1 English

Vitis Libraries

Release Date
2024-08-06
Version
2024.1 English

Reloadable coefficients are also available for Super Sample Rate (SSR) modes of operation. For more details on SSR, refer to: Super Sample Rate. When the FIR is configured in an SSR mode that creates multiple parallel computation paths, i.e., TP_SSR or TP_PARA_INTERP_POLY is greater than 1, the graph will be created with an array of RTP input ports.

Note

The size of the RTP input port array is equal to the total number of parallel computation paths, defined by: TP_SSR * TP_PARA_INTERP_POLY.

Each port should contain the same taps array content, i.e., each additional port must be a duplicate of the complete coefficient array.
This is a necessary step to connect a RTP port to each of otherwise unrelated output computation paths.

Note

For example, an interpolation FIR is configured with: TP_SSR = 2 and TP_PARA_INTERP_POLY = 3. Such a configuration will result in 2 * 3 = 6 distinct computation paths, which all require an RTP port duplicate.

Asymmetrical FIR

As mentioned above, asymmetrical filters expect the port to contain the full array of coefficients, i.e., the coefficient array size is equal to the TP_FIR_LEN.

Symmetrical FIR

In the case of symmetrical filters, the size of each port will be dependent on the underlying kernel structure, which for SSR cases, is based on an Asymmetric FIR variant.
As a result, deriving the symmetric coefficients from the argument passed to graph’s update() method is not available.
The length of the array expected will therefore be (TP_FIR_LEN),
e.g., for a filter of length 7, where int16 type coefficient’s values are:
{1, 2, 3, 5, 3, 2, 1},
seven non-zero tap values, including the center tap, are expected, i.e., the update() method should get an argument:
int16 tapsIn[7] =  {1, 2, 3, 5, 3, 2, 1}.
A helper function: convert_sym_taps_to_asym is provided in the Graph utils to ease converting the taps array to the required format.

Half-band FIR

For half-band filters, similarly, the size of each port will be dependent on the underlying kernel structure, which for SSR cases is based on an Asymmetric FIR variant.
As a result, deriving the symmetric coefficients from the argument passed to graph’s update() method is not available. However, only the non-zero coefficients should be entered, with the center tap last in the array.
The length of the array expected will therefore be (TP_FIR_LEN+1)/2+1,
e.g., for a half-band filter of length 7, where int16 type coefficient’s values are:
{1, 0, 2, 5, 2, 0, 1},
three non-zero tap values, including the center tap, are expected, i.e., the update() method should get an argument:
int16 tapsIn[5] =  {1, 2, 2, 1, 5}.
A helper function: convert_hb_taps_to_asym is provided in the Graph utils to ease converting the taps array to the required format.