Reloadable Coefficients - array dimensions for SSR cases - 2023.1 English

Vitis Libraries

Release Date
2023-12-20
Version
2023.1 English

Reloadable coefficients are also available for Super Sample Rate (SSR) modes of operation, please refer to: Super Sample Rate for more details on SSR. 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 an 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 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. 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 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},
7 non-zero tap values, including the centre tap, are expected, i.e. 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 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 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 centre 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},
3 non-zero tap values, including the centre tap, are expected, i.e. 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 taps array to the required format.