全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

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

时间:2023-06-26 16:55

人气:

作者:admin

标签: VVAS  生成    调用  硬件  HLS 

导读:我们以smartcam的预处理作为例子。xf_pp_pipeline的作用是将输入图像的格式从NV12转换为BGR,再进行减均值和归一化操作。...

01

HLS kernel创建

我们以smartcam的预处理作为例子。xf_pp_pipeline的作用是将输入图像的格式从NV12转换为BGR,再进行减均值和归一化操作。xf_pp_pipeline的实现基于HLS vision library。Vitis视觉库是为在Vitis开发环境中工作而设计的,它为在FPGA设备上加速的计算机视觉功能提供了一个软件接口。Vitis视觉库的功能大多与OpenCV的功能相似。更多的详细说明可以在参考链接中找到。

#include "xf_pp_pipeline_config.h"
void pp_pipeline_accel(ap_uint

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。

图片

02

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。

int32_t xlnx_kernel_init(IVASKernel *handle){
	......
	kernel_priv- >mean_r = json_number_value(val);
	kernel_priv- >mean_g = json_number_value(val);
	kernel_priv- >mean_b = json_number_value(val);
	kernel_priv- >scale_r = json_number_value(val);
	kernel_priv- >scale_g = json_number_value(val);
	kernel_priv- >scale_b = json_number_value(val);
	......
}

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

int32_t xlnx_kernel_start(IVASKernel *handle, int start, IVASFrame *input[MAX_NUM_OBJECT], IVASFrame *output[MAX_NUM_OBJECT])
{
	......
    ivas_register_write(handle, &(input[0]- >props.width), sizeof(uint32_t), 0x40);   /* In width */
    ivas_register_write(handle, &(input[0]- >props.height), sizeof(uint32_t), 0x48);  /* In height */
    ivas_register_write(handle, &(input[0]- >props.stride), sizeof(uint32_t), 0x50);  /* In stride */

    ivas_register_write(handle, &(output[0]- >props.width), sizeof(uint32_t), 0x58);  /* Out width */
    ivas_register_write(handle, &(output[0]- >props.height), sizeof(uint32_t), 0x60); /* Out height */
    ivas_register_write(handle, &(output[0]- >props.width), sizeof(uint32_t), 0x68); /* Out stride */

    ivas_register_write(handle, &(input[0]- >paddr[0]), sizeof(uint64_t), 0x10);      /* Y Input */
    ivas_register_write(handle, &(input[0]- >paddr[1]), sizeof(uint64_t), 0x1C);      /* UV Input */
    ivas_register_write(handle, &(output[0]- >paddr[0]), sizeof(uint64_t), 0x28);      /* Output */
    ivas_register_write(handle, &(kernel_priv- >params- >paddr[0]), sizeof(uint64_t), 0x34);     /* Params */

    ivas_register_write(handle, &start, sizeof(uint32_t), 0x0);                      /* start */
	......
}

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

uint32_t xlnx_kernel_deinit(IVASKernel *handle)
{
    ResizeKernelPriv *kernel_priv;
    kernel_priv = (ResizeKernelPriv *)handle- >kernel_priv;
    ivas_free_buffer (handle, kernel_priv- >params);
    free(kernel_priv);
    return 0;
}

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

int32_t xlnx_kernel_done(IVASKernel *handle)
{
    uint32_t val = 0, count = 0;
    do {
        ivas_register_read(handle, &val, sizeof(uint32_t), 0x0); /* start */
        count++;
        if (count > 1000000) {
            printf("ERROR: kernel done wait TIME OUT !!\\\\n");
            return 0;
        }
    } while (!(0x4 & val));
    return 1;
}

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

{
  "xclbin-location":"/lib/firmware/xilinx/kv260-smartcam/kv260-smartcam.xclbin",
  "vvas-library-repo": "/opt/xilinx/kv260-smartcam/lib",
  "element-mode": "transform",
  "kernels": [
    {
      "kernel-name": "pp_pipeline_accel:{pp_pipeline_accel_1}",
      "library-name": "libvvas_xpp.so",
      "config": {
        "debug_level" : 1,
        "mean_r": 123,
        "mean_g": 117,
        "mean_b": 104,
        "scale_r": 1,
        "scale_g": 1,
        "scale_b": 1
      }
    }
  ]
}
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信