0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:AMD Xilinx开发者社区 作者:Shaoyi Chen 2023-06-26 16:55 次阅读

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
      }
    }
  ]
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    428

    浏览量

    26464
  • 计算机视觉
    +关注

    关注

    8

    文章

    1694

    浏览量

    45894
  • OpenCV
    +关注

    关注

    29

    文章

    624

    浏览量

    41210
  • 硬件加速器
    +关注

    关注

    0

    文章

    41

    浏览量

    12749
  • HLS
    HLS
    +关注

    关注

    1

    文章

    128

    浏览量

    23990
收藏 人收藏

    评论

    相关推荐

    无法导入硬件加速器

    嗨!我已经创建了一个硬件加速器(在vhdl中)并且合成成功完成。但是,当我使用创建和导入外围设备向导时,它向我显示我的包在库中不可用,尽管它是。我能做什么 ???L'enfer,c'est l
    发表于 02-27 14:15

    H.264解码中CABAC硬件加速器怎么实现?

    H.264解码中CABAC硬件加速器怎么实现?
    发表于 06-07 06:48

    问下ARM3的硬件加速器只能用verilog写吗?

    问下ARM3的硬件加速器只能用verilog写吗?
    发表于 09-30 10:45

    利用硬件加速器提高处理的性能

    处理内部集成的硬件加速器可以实现三种广泛使用的信号处理操作:FIR(有限冲激响应)、IIR(无限冲激响应)和FFT(快速傅里叶变换)。硬件加速器减轻了核处理的负担,能潜在的提升处理
    发表于 12-04 15:22 1281次阅读

    Veloce仿真环境下的SoC端到端硬件加速器功能验证

    很多人认为硬件加速器无非是一种速度更快的仿真而已。毫无疑问,由于硬件加速器使用物理硬件进行仿真,使用硬件加速器验证复杂的集成电路和大型片上
    发表于 03-28 14:50 3588次阅读
    Veloce仿真环境下的SoC端到端<b class='flag-5'>硬件加速器</b>功能验证

    基于Xilinx FPGA的Memcached硬件加速器介绍

    本教程讨论基于Xilinx FPGA的Memcached硬件加速器的技术细节,该硬件加速器可为10G以太网端口提供线速Memcached服务。
    的头像 发表于 11-27 06:41 3690次阅读

    毫米波传感1443硬件加速器的简单介绍

    2.6 mmWave波形传感简介1443硬件加速器
    的头像 发表于 05-08 06:20 3268次阅读
    毫米波传感<b class='flag-5'>器</b>1443<b class='flag-5'>硬件加速器</b>的简单<b class='flag-5'>介绍</b>

    硬件加速器提升下一代SHARC处理的性能

    硬件加速器提升下一代SHARC处理的性能
    发表于 04-23 13:06 6次下载
    <b class='flag-5'>硬件加速器</b>提升下一代SHARC处理<b class='flag-5'>器</b>的性能

    OpenHarmony 分论坛-华秋电子新硬件加速器

    OpenHarmony 分论坛-华秋电子新硬件加速器 今天的华为开发者大会2021上,OpenHarmony分论坛上展示了华秋电子新硬件加速器 。 HDC分论坛-OpenHarmony 分论坛推荐链接:http://t.elecfans.com/live/1708.htm
    的头像 发表于 10-23 16:53 1692次阅读
    OpenHarmony 分论坛-华秋电子新<b class='flag-5'>硬件加速器</b>

    OpenHarmony Dev-Board-SIG专场:OpenHarmony 新硬件加速器

    OpenHarmony Dev-Board-SIG专场:OpenHarmony 新硬件加速器
    的头像 发表于 12-28 15:12 1313次阅读
    OpenHarmony Dev-Board-SIG专场:OpenHarmony 新<b class='flag-5'>硬件加速器</b>

    什么是AI加速器 如何确需要AI加速器

    AI加速器是一类专门的硬件加速器或计算机系统旨在加速人工智能的应用,主要应用于人工智能、人工神经网络、机器视觉和机器学习。
    发表于 02-06 12:47 4506次阅读

    用于 AI 应用的硬件加速器设计师指南

    当 AI 设计人员将硬件加速器整合到用于训练和推理应用的定制芯片中时,应考虑以下四个因素
    发表于 08-19 11:35 1600次阅读
    用于 AI 应用的<b class='flag-5'>硬件加速器</b>设计师指南

    借助硬件加速器开发您的设计

    借助硬件加速器开发您的设计
    的头像 发表于 01-03 09:45 872次阅读

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

    本文介绍VVAS框架所支持调用的H/W(HLS)内核
    的头像 发表于 07-14 15:55 681次阅读
    <b class='flag-5'>VVAS</b><b class='flag-5'>调用</b><b class='flag-5'>HLS</b><b class='flag-5'>生成</b>的<b class='flag-5'>硬件加速器</b>的<b class='flag-5'>主要</b><b class='flag-5'>流程</b>

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

    本篇博客介绍 VVAS 框架所支持调用的 H/W(HLS) 内核。 H/W 内核指的是使用 HLS 工具
    的头像 发表于 08-04 11:00 656次阅读
    使用<b class='flag-5'>VVAS</b><b class='flag-5'>调用</b><b class='flag-5'>HLS</b><b class='flag-5'>生成</b><b class='flag-5'>硬件加速器</b>的<b class='flag-5'>主要</b><b class='flag-5'>流程</b>