使用VVAS调用HLS生成硬件加速器的主要流程

描述

本文作者: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 的功能相似。更多的详细说明可以在参考链接中找到。

Vitis

xf_pp_pipeline_accel.cpp 作为硬件的一部分,需要将它和 platform 结合在一起。v++ 将 HLS kernel 打包为 xo 文件用于后续的硬件集成。

Vitis

kv260_ispMipiRx_vcu_DP 是 smartcam 应用使用的 platform,xf_pp_pipeline.cpp 打包成 xo 对象后,通过v++ 链接为完整的硬件工程并生成 xclbin 文件。完整的硬件框图如下图所示,红框部分为对应的 HLS kernel。

Vitis

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。

Vitis

xlnx_kernel_start() 函数为 HLS kernel 配置参数。

Vitis

xlnx_kernel_deinit() 函数用来释放不需要的句柄。

Vitis

xlnx_kernel_done() 函数进行超时检测。

Vitis

通过这四个函数就完成了 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 的内容为:

Vitis

本文简要介绍了 VVAS 调用 HLS 生成的硬件加速器的主要流程,更多的细节可以参考 VVAS 手册。
 
 审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分