Vitis Model Composer supports importing kernels declared in a namespace. For both templatized and non-templatized kernels you need to qualify the kernel function with the namespace.
Consider the following examples where the non-templatized kernel function is qualified
with the namespace ns1
and templatized kernel function is qualified
with the namespace ns2
.
Kernel.h
namespace ns1 {
void myFunc_1(input_stream<int32> * restrict i1,
output_stream<int32> * restrict o1);
} // namespace ns1
templateKernel.h
namespace ns2 {
template<typename T,int size>
void myFunc_2(input_stream<int32> * restrict i1,
output_stream<int32> * restrict o1);
} // namespace ns2
To import the above functions using the AIE Kernel and AIE Template Kernel blocks, the Kernel function parameter in the Block Parameters dialog box should be updated as follows:
- Kernel function
-
ns1::myFunc_1
(Non-templatized function) - Kernel function
-
ns2::myFunc_2
(Templatized function)
If you have a class kernel declared in a namespace, then only the kernel class field should be qualified, and not the kernel function.
For example, consider the following kernel class which is qualified with the
namespace ns3
.
class_kernel.h
namespace ns3 {
#include "adf.h"
class simple_class
{
private:
int16 val;
int16 numSamples;
public:
simple_class();
void func_q(input_window_int16* in, output_window_int16* out);
static void registerKernelClass()
{
REGISTER_FUNCTION(simple_class::func_q);
}
};
} // namespace ns3
To Import the kernel function func_q
as a
block, the Kernel class and
Kernel function
parameters in the AIE Class Kernel block should be updated as follows:
- Kernel class
-
ns3::simple_class
- Kernel function
-
func_q