0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

VVAS調(diào)用HLS生成硬件加速器的主要流程介紹

冬至子 ? 來(lái)源:AMD Xilinx開(kāi)發(fā)者社區(qū) ? 作者:Shaoyi Chen ? 2023-06-26 16:55 ? 次閱讀

01

HLS kernel創(chuàng)建

我們以smartcam的預(yù)處理作為例子。xf_pp_pipeline的作用是將輸入圖像的格式從NV12轉(zhuǎn)換為BGR,再進(jìn)行減均值和歸一化操作。xf_pp_pipeline的實(shí)現(xiàn)基于HLS vision library。Vitis視覺(jué)庫(kù)是為在Vitis開(kāi)發(fā)環(huán)境中工作而設(shè)計(jì)的,它為在FPGA設(shè)備上加速的計(jì)算機(jī)視覺(jué)功能提供了一個(gè)軟件接口。Vitis視覺(jué)庫(kù)的功能大多與OpenCV的功能相似。更多的詳細(xì)說(shuō)明可以在參考鏈接中找到。

#include "xf_pp_pipeline_config.h"
void pp_pipeline_accel(ap_uint

xf_pp_pipeline_accel.cpp作為硬件的一部分,需要將它和platform結(jié)合在一起。v++將HLS kernel打包為xo文件用于后續(xù)的硬件集成。

圖片

kv260_ispMipiRx_vcu_DP是smartcam應(yīng)用使用的platform,xf_pp_pipeline.cpp打包成xo對(duì)象后,通過(guò)v++鏈接為完整的硬件工程并生成xclbin文件。完整的硬件框圖如下圖所示,紅框部分為對(duì)應(yīng)的HLS kernel。

圖片

02

Kernel調(diào)用

使用VVAS框架為xf_pp_pipeline.cpp編寫(xiě)自定義驅(qū)動(dòng)是要實(shí)現(xiàn)四個(gè)函數(shù),分別是xlnx_kernel_start、xlnx_kernel_done、xlnx_kernel_init、xlnx_kernel_deinit。

xlnx_kernel_init()函數(shù)讀取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()函數(shù)為HLS kernel配置參數(shù)。

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()函數(shù)用來(lái)釋放不需要的句柄。

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()函數(shù)進(jìn)行超時(shí)檢測(cè)

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;
}

通過(guò)這四個(gè)函數(shù)就完成了VVAS自定義插件的設(shè)計(jì)。在smartcam應(yīng)用運(yùn)行時(shí),通過(guò)命令行g(shù)st-launch-1.0 -v filesrc XXXXXX ! queue ! vvas_xmultisrc kconfig="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json" ! XXXXXX完成插件的調(diào)用。

其中preprocess.json的內(nèi)容為:

{
  "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
      }
    }
  ]
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26452
  • 計(jì)算機(jī)視覺(jué)

    關(guān)注

    8

    文章

    1690

    瀏覽量

    45876
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41183
  • 硬件加速器
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    12743
  • HLS
    HLS
    +關(guān)注

    關(guān)注

    1

    文章

    128

    瀏覽量

    23968
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無(wú)法導(dǎo)入硬件加速器

    嗨!我已經(jīng)創(chuàng)建了一個(gè)硬件加速器(在vhdl中)并且合成成功完成。但是,當(dāng)我使用創(chuàng)建和導(dǎo)入外圍設(shè)備向?qū)r(shí),它向我顯示我的包在庫(kù)中不可用,盡管它是。我能做什么 ???L'enfer,c'est l
    發(fā)表于 02-27 14:15

    H.264解碼中CABAC硬件加速器怎么實(shí)現(xiàn)?

    H.264解碼中CABAC硬件加速器怎么實(shí)現(xiàn)?
    發(fā)表于 06-07 06:48

    問(wèn)下ARM3的硬件加速器只能用verilog寫(xiě)嗎?

    問(wèn)下ARM3的硬件加速器只能用verilog寫(xiě)嗎?
    發(fā)表于 09-30 10:45

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

    處理內(nèi)部集成的硬件加速器可以實(shí)現(xiàn)三種廣泛使用的信號(hào)處理操作:FIR(有限沖激響應(yīng))、IIR(無(wú)限沖激響應(yīng))和FFT(快速傅里葉變換)。硬件加速器減輕了核處理的負(fù)擔(dān),能潛在的提升處理
    發(fā)表于 12-04 15:22 ?1265次閱讀

    Veloce仿真環(huán)境下的SoC端到端硬件加速器功能驗(yàn)證

    很多人認(rèn)為硬件加速器無(wú)非是一種速度更快的仿真而已。毫無(wú)疑問(wèn),由于硬件加速器使用物理硬件進(jìn)行仿真,使用硬件加速器驗(yàn)證復(fù)雜的集成電路和大型片上
    發(fā)表于 03-28 14:50 ?3559次閱讀
    Veloce仿真環(huán)境下的SoC端到端<b class='flag-5'>硬件加速器</b>功能驗(yàn)證

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

    本教程討論基于Xilinx FPGA的Memcached硬件加速器的技術(shù)細(xì)節(jié),該硬件加速器可為10G以太網(wǎng)端口提供線速M(fèi)emcached服務(wù)。
    的頭像 發(fā)表于 11-27 06:41 ?3678次閱讀

    毫米波傳感1443硬件加速器的簡(jiǎn)單介紹

    2.6 mmWave波形傳感簡(jiǎn)介1443硬件加速器
    的頭像 發(fā)表于 05-08 06:20 ?3251次閱讀
    毫米波傳感<b class='flag-5'>器</b>1443<b class='flag-5'>硬件加速器</b>的簡(jiǎn)單<b class='flag-5'>介紹</b>

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

    硬件加速器提升下一代SHARC處理的性能
    發(fā)表于 04-23 13:06 ?6次下載
    <b class='flag-5'>硬件加速器</b>提升下一代SHARC處理<b class='flag-5'>器</b>的性能

    OpenHarmony 分論壇-華秋電子新硬件加速器

    OpenHarmony 分論壇-華秋電子新硬件加速器 今天的華為開(kāi)發(fā)者大會(huì)2021上,OpenHarmony分論壇上展示了華秋電子新硬件加速器 。 HDC分論壇-OpenHarmony 分論壇推薦鏈接:http://t.elecfans.com/live/1708.htm
    的頭像 發(fā)表于 10-23 16:53 ?1684次閱讀
    OpenHarmony 分論壇-華秋電子新<b class='flag-5'>硬件加速器</b>

    OpenHarmony Dev-Board-SIG專(zhuān)場(chǎng):OpenHarmony 新硬件加速器

    OpenHarmony Dev-Board-SIG專(zhuān)場(chǎng):OpenHarmony 新硬件加速器
    的頭像 發(fā)表于 12-28 15:12 ?1298次閱讀
    OpenHarmony Dev-Board-SIG專(zhuān)場(chǎng):OpenHarmony 新<b class='flag-5'>硬件加速器</b>

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

    AI加速器是一類(lèi)專(zhuān)門(mén)的硬件加速器或計(jì)算機(jī)系統(tǒng)旨在加速人工智能的應(yīng)用,主要應(yīng)用于人工智能、人工神經(jīng)網(wǎng)絡(luò)、機(jī)器視覺(jué)和機(jī)器學(xué)習(xí)。
    發(fā)表于 02-06 12:47 ?4455次閱讀

    用于 AI 應(yīng)用的硬件加速器設(shè)計(jì)師指南

    當(dāng) AI 設(shè)計(jì)人員將硬件加速器整合到用于訓(xùn)練和推理應(yīng)用的定制芯片中時(shí),應(yīng)考慮以下四個(gè)因素
    發(fā)表于 08-19 11:35 ?1578次閱讀
    用于 AI 應(yīng)用的<b class='flag-5'>硬件加速器</b>設(shè)計(jì)師指南

    借助硬件加速器開(kāi)發(fā)您的設(shè)計(jì)

    借助硬件加速器開(kāi)發(fā)您的設(shè)計(jì)
    的頭像 發(fā)表于 01-03 09:45 ?852次閱讀

    VVAS調(diào)用HLS生成硬件加速器主要流程

    本文介紹VVAS框架所支持調(diào)用的H/W(HLS)內(nèi)核
    的頭像 發(fā)表于 07-14 15:55 ?665次閱讀
    <b class='flag-5'>VVAS</b><b class='flag-5'>調(diào)用</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調(diào)用HLS生成硬件加速器主要流程

    本篇博客介紹 VVAS 框架所支持調(diào)用的 H/W(HLS) 內(nèi)核。 H/W 內(nèi)核指的是使用 HLS 工具
    的頭像 發(fā)表于 08-04 11:00 ?631次閱讀
    使用<b class='flag-5'>VVAS</b><b class='flag-5'>調(diào)用</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>