我正在处理Vivado HLS 2015.4上的图像。
我得到了大约311774个时钟周期的非常高的延迟。即使程序只接受两个输入图像,并将其从RGB转换为灰度。总的延迟是311774,因为我在所有三个Axi2Mat
,RGB2GRAY
和Mat2AXI
上都得到了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);
}
发布于 2018-06-10 05:44:32
Vivado UG902: Vivado Design Suite User Guide P.293:由于函数已经是流水线的,因此添加数据流优化可以确保流水线函数将并行执行。
因此,只需将#pragma HLS dataflow
指令添加到代码中,就可以确保每个时钟处理一个样本,函数之间有数据流。因此,延迟应该减少到77-78k (我假设是cols*rows
)。
https://stackoverflow.com/questions/50479992
复制相似问题