c++ - 为什么延迟太高,即使它只是 RGB 到灰色转换 (Vivado HLS)?

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

我在 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);

}

最佳答案

UG902: Vivado Design Suite User Guide P. 293: Since the functions are already pipelined, adding the DATAFLOW optimization ensures the pipelined functions will execute in parallel.

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

关于c++ - 为什么延迟太高,即使它只是 RGB 到灰色转换 (Vivado HLS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479992/

相关文章:

system-verilog - 两个不同向量宽度的逻辑相等

c++ - OpenCL 重用具有不同 DEFINE (-D) 的 cl_kernel

c++ - 概念的部分排序如何解决约束重载?

c++ - C++ 中的继承和更改变量

c++ - 是什么让这段代码变得糟糕

python - 没有 CNN 的重复模式的图像语义分割

image - 如何缩放特殊范围[0.9 1.1]内的数据?

python - 如何使用 Python 从图像中分离复选框按钮和复选框文本?

c - 从 vivado 2015.2 迁移到 2016.4 后初始化和使用 SD 卡不起作用

Verilog:Vivado 综合工具是否会自动将信号添加到灵敏度列表?