【问题标题】:Why latency is too high even though it's just RGB to gray conversion (Vivado HLS)?为什么即使只是 RGB 到灰度转换 (Vivado HLS),延迟也会太高?
【发布时间】:2023-03-20 16:24:02
【问题描述】:

我正在使用 Vivado HLS 2015.4 上的图像。

我得到了大约 311774 个时钟周期的非常高的延迟。即使程序只需要两个输入图像并将其从 RGB 转换为灰色。总延迟为 311774,因为我的所有三个 Axi2MatRGB2GRAYMat2AXI 的延迟为 77-78k。

有什么方法可以减少它,以便我可以通过管道将它的最终延迟设为 78k 左右?

我附上我的代码和综合报告:

#include <hls_video.h>
#include <hls/hls_video_types.h>
#include "top.h"


void toGray(AXI_IN_STREAM &IN_STREAM_1, AXI_IN_STREAM &IN_STREAM_2, AXI_OUT_STREAM &OUT_STREAM_1, AXI_OUT_STREAM &OUT_STREAM_2, unsigned int cols, unsigned int rows){
    #pragma HLS INTERFACE axis port=IN_STREAM_1
    #pragma HLS INTERFACE axis port=OUT_STREAM_1

    #pragma HLS INTERFACE axis port=IN_STREAM_2
    #pragma HLS INTERFACE axis port=OUT_STREAM_2


    #pragma HLS RESOURCE core=AXI_SLAVE variable=rows metadata="-bus_bundle CONTROL"
    #pragma HLS RESOURCE core=AXI_SLAVE variable=cols metadata="-bus_bundle CONTROL"
    #pragma HLS RESOURCE core=AXI_SLAVE variable=return metadata="-bus_bundle CONTROL"

    #pragma HLS INTERFACE ap_stable port=rows
    #pragma HLS INTERFACE ap_stable port=cols

    hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC3> inMat_1(rows, cols);
    hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC3> inMat_2(rows, cols);

    hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC1> grayMat_1(rows, cols);
    hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC1> grayMat_2(rows, cols);


 // hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC1> outMat(rows, cols);

    hls::AXIvideo2Mat(IN_STREAM_1, inMat_1);
    hls::AXIvideo2Mat(IN_STREAM_2, inMat_2);

    hls::CvtColor<HLS_BGR2GRAY, HLS_8UC3, HLS_8UC1>(inMat_1, grayMat_1);
    hls::CvtColor<HLS_BGR2GRAY, HLS_8UC3, HLS_8UC1>(inMat_2, grayMat_2);
 // hls::EqualizeHist(grayMat, outMat );




    hls::Mat2AXIvideo(grayMat_1, OUT_STREAM_1);
    hls::Mat2AXIvideo(grayMat_2, OUT_STREAM_2);

}

【问题讨论】:

  • 77K:千秒?
  • 一个进程 77K 个时钟周期
  • 是否需要格式转换? RGB 到灰度的转换是 RGB 分量的简单线性组合,之后可能会进行钳位。

标签: c++ image-processing vivado low-latency vivado-hls


【解决方案1】:

UG902:Vivado Design Suite 用户指南第 293 页:由于函数已流水线化,因此添加 DATAFLOW 优化可确保 流水线函数将并行执行。

因此,只需将#pragma HLS dataflow 指令添加到您的代码即可确保您在每个时钟处理一个样本,并在函数之间使用数据流。结果,延迟应该减少到 77-78k(我假设是 cols*rows)。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2013-06-24
    • 2010-10-15
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多