本文作者:AMD 工程师 Shaoyi Chen
本篇博客介绍 VVAS 框架所支持调用的 H/W(HLS) 内核。 H/W 内核指的是使用 HLS 工具生成的在 FPGA 部分执行的硬件功能模块。
HLS kernel 创建:
我们以 smartcam 的预处理作为例子,相关的代码可以在参考链接中找到。xf_pp_pipeline 的作用是将输入图像的格式从 NV12 转换为 BGR,再进行减均值和归一化操作。xf_pp_pipeline 的实现基于 HLS vision library。Vitis 视觉库是为在 Vitis 开发环境中工作而设计的,它为在 FPGA 设备上加速的计算机视觉功能提供了一个软件接口。Vitis 视觉库的功能大多与 OpenCV 的功能相似。更多的详细说明可以在参考链接中找到。
xf_pp_pipeline_accel.cpp 作为硬件的一部分,需要将它和 platform 结合在一起。v++ 将 HLS kernel 打包为 xo 文件用于后续的硬件集成。
kv260_ispMipiRx_vcu_DP 是 smartcam 应用使用的 platform,xf_pp_pipeline.cpp 打包成 xo 对象后,通过v++ 链接为完整的硬件工程并生成 xclbin 文件。完整的硬件框图如下图所示,红框部分为对应的 HLS kernel。
Kernel 调用:
使用 VVAS 框架为 xf_pp_pipeline.cpp 编写自定义驱动是要实现四个函数,分别是:
xlnx_kernel_start
xlnx_kernel_done
xlnx_kernel_init
xlnx_kernel_deinit
xlnx_kernel_init() 函数读取 json 文件中的 mean_r、mean_g、mean_b、scale_r、scale_g、scale_b。
xlnx_kernel_start() 函数为 HLS kernel 配置参数。
xlnx_kernel_deinit() 函数用来释放不需要的句柄。
xlnx_kernel_done() 函数进行超时检测。
通过这四个函数就完成了 VVAS 自定义插件的设计。在 smartcam 应用运行时,通过命令行 gst-launch-1.0 -v filesrc XXXXXX ! queue ! vvas_xmultisrc kconfig="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json" ! XXXXXX 完成插件的调用。
其中 preprocess.json 的内容为:
本文简要介绍了 VVAS 调用 HLS 生成的硬件加速器的主要流程,更多的细节可以参考 VVAS 手册。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !