16
16
#include " ForwardSubstitution.hpp"
17
17
#include " InputDemux.hpp"
18
18
#include " SteeringVectorGenerator.hpp"
19
- #include " StreamingQRD.hpp"
19
+ #include " StreamingQRDWrapper.hpp"
20
+ #include " DiagReciprocal.hpp"
20
21
#include " Transpose.hpp"
21
22
22
23
using namespace sycl ;
@@ -27,6 +28,7 @@ enum class MVDRKernelNames {
27
28
input_demux,
28
29
transpose,
29
30
streaming_qrd,
31
+ diag_reciprocal,
30
32
steering_vector_generator,
31
33
forward_substitution,
32
34
backward_substitution,
@@ -48,6 +50,8 @@ class Transpose;
48
50
template <size_t k_instance_num>
49
51
class StreamingQRD ;
50
52
template <size_t k_instance_num>
53
+ class DiagReciprocal ;
54
+ template <size_t k_instance_num>
51
55
class SteeringVectorGenerator ;
52
56
template <size_t k_instance_num>
53
57
class ForwardSubstitution ;
@@ -242,12 +246,13 @@ MVDREventArray SubmitMVDRKernels(
242
246
((k_num_sensor_inputs * (k_num_sensor_inputs + 1 )) / 2 ) * 2 ;
243
247
using RMatrixPipes =
244
248
fpga_tools::PipeArray<RMatrixPipesID<k_instance_num>, ComplexType,
245
- kRMatrixPipeMinDepth , 2 >;
249
+ kRMatrixPipeMinDepth , 3 >;
246
250
using RMatrixFSPipe = typename RMatrixPipes::template PipeAt<0 >;
247
251
using RMatrixBSPipe = typename RMatrixPipes::template PipeAt<1 >;
252
+ using RMatrixDRPipe = typename RMatrixPipes::template PipeAt<2 >;
248
253
using RMatrixDupPipe =
249
254
fpga_tools::PipeDuplicator<RMatrixDupPipeID<k_instance_num>, ComplexType,
250
- RMatrixFSPipe, RMatrixBSPipe, RMatrixPipeOut>;
255
+ RMatrixFSPipe, RMatrixBSPipe, RMatrixDRPipe, RMatrixPipeOut>;
251
256
constexpr int kRDiagRecipVectorPipeMinDepth = k_num_sensor_inputs * 2 ;
252
257
using RDiagRecipVectorPipes =
253
258
fpga_tools::PipeArray<RDiagRecipVectorPipesID<k_instance_num>, float ,
@@ -297,7 +302,7 @@ MVDREventArray SubmitMVDRKernels(
297
302
// Q matrix pipe
298
303
// Q matrix not used in MVDR design, so this is a 'null' pipe (a
299
304
// PipeDuplicator with no output pipes connected)
300
- using QMatrixColumn = fpga_tools::NTuple<ComplexType, k_num_sensor_inputs >;
305
+ using QMatrixColumn = fpga_tools::NTuple<ComplexType, k_num_complex_per_xrx_read >;
301
306
using QMatrixPipe =
302
307
fpga_tools::PipeDuplicator<QMatrixPipeID<k_instance_num>, QMatrixColumn>;
303
308
@@ -359,8 +364,15 @@ MVDREventArray SubmitMVDRKernels(
359
364
k_num_complex_per_xrx_read, // number of elements per pipe read
360
365
TransposedTrainingDataPipe, // A matrix input
361
366
QMatrixPipe, // Q output pipe (unused in MVDR)
362
- RMatrixDupPipe, // R output pipe
363
- RDiagRecipVectorDupPipe // 1 / the value of each diagonal entry of R
367
+ RMatrixDupPipe // R output pipe
368
+ >(q);
369
+
370
+ events[static_cast <int >(MVDRKernelNames::diag_reciprocal)] =
371
+ SubmitDiagReciprocalKernel<
372
+ DiagReciprocal<k_instance_num>, // Name to use for the Kernel
373
+ k_num_sensor_inputs, // number of rows of the R matrix
374
+ RMatrixDRPipe, // Input R pipe
375
+ RDiagRecipVectorDupPipe // Output pipe for reciprocals
364
376
>(q);
365
377
366
378
events[static_cast <int >(MVDRKernelNames::forward_substitution)] =
0 commit comments