There is a configuration class derived from the base configuration class xf::solver::qrfTraits by redefining the appropriate class member.
struct my_qrf_traits : xf::solver::qrfTraits<A_ROWS, A_COLS, MATRIX_IN_T, MATRIX_OUT_T> {
static const int ARCH = SEL_ARCH;
};
The base configuration class is:
template <int RowsA, int ColsA, typename InputType, typename OutputType>
struct qrfTraits {
static const int ARCH = 1;
static const int CALC_ROT_II = 1;
static const int UPDATE_II = 4;
static const int UNROLL_FACTOR =1;
};
Note
- ARCH: Select implementation. 0=Basic. 1=Lower latency/thoughput architecture.
- CALC_ROT_II: Specify the rotation calculation loop target II of the QRF_ALT architecture(1).
- UPDATE_II: Specify the pipelining target for the Q & R update loops.
- UNROLL_FACTOR: Specify the unrolling factor for Q & R update loops of the QRF_ALT architecture(1).
The configuration class is supplied to the xf::solver::qrf function as a template paramter as follows.
template <bool TransposedQ,
int RowsA,
int ColsA,
typename InputType,
typename OutputType,
typename QRF_TRAITS = DEFAULT_QRF_TRAITS>
void qrf(hls::stream<InputType>& matrixAStrm,
hls::stream<OutputType>& matrixQStrm,
hls::stream<OutputType>& matrixRStrm)