HLS Videolib能够实现的功能,xfopencv也都能实现。
下面重点实现几个之前的例子,看看从videolib移植到xfopencv需要注意哪些要点。
(一)CFLAGS
被编译的文件,例如TOP函数的CPP,或者子函数的CPP,以及TB的CPP,都需要添加CFLAGS。
"-D__SDSVHLS__ --std=c++0x"
设置CFLAGS:
方法一,在GUI中,在project setting中,设置各个文件的CFLAG。
方法二,找到vivado_hls.app文件,用vscode打开,修改CFLAGS。
例如,类似的描述块中,cpp文件,都添加上CFLAGS。
注意,在CSIM和COSIM中,必须添加–std=c++0x,
但是在RTL时,又要再去掉这个标志去完成综合。
推荐使用TCL模式建工程,这样,方便于设置每个CPP文件的CFLAG。
建好工程后,再使用GUI执行后续任务。
(二)searching path
由于xfopencvlib是我们自行下载的,HLS并不会找到xfopencv的搜索路径。
我们需要给HLS指定xfopencv的搜索路径。
方法一,vivado_hls.app文件,用vscode打开,修改testbench以及所有CPP的CFLAGS,添加
-ID:/Xilinx/Vivado/2019.1/xfopencv/include
注意不要有空格。
方法二,修改CDT user setting entry。
(三)namespace
之前使用的hls::Mat,现在改为使用xf::Mat。
注意,xf::Mat没有重载<<和>>,只能使用read和write函数。
hls videolib中的14个接口函数,只保留了两个在xfopencv中。
cvMat2AXIvideo
AXIvideo2cvMat
这是用在CSIM中的函数。
在RTL中使用的,是
xf::AXIvideo2xfMat
xf::xfMat2AXIvideo
替代之前的hls video lib中的等价函数。
使用它们,需要包含
common/xf_infra.h文件。这个文件里已经包含了hls_stream.h文件,所以不需要显式包含hls_stream.h了。
(四)编码风格
在HLS域中编程时,我们往往会使用typedef预先定义好需要的类型,然后再使用。
在XF域中编程时,我们往往选择直接在代码行中具象实例化一个模板类或者模板函数,统一使用预定义的常量宏。
两种风格都是可取的。
但是前一种风格下,好处在于逻辑更清晰,坏处在于,大量使用了模板参数推断,这依赖于编译器。
后一种风格下,模板参数全部显式手工完成,代码更严谨。
+++++++++++++++++++++++++++++++++++++++++
首先是定义自己的top.h文件。



