Почему задержка слишком высока, хотя это просто преобразование RGB в серый (Vivado HLS)? - PullRequest
0 голосов
/ 23 мая 2018

Я работаю с изображениями в Vivado HLS 2015.4.

У меня очень большая задержка - около 311774 тактов.Хотя программа просто берет два входных изображения и преобразует их в серый из RGB.Общая задержка составляет 311774, так как я получаю задержку 77–78 тыс. Для всех трех Axi2Mat, RGB2GRAY и Mat2AXI.

. Есть ли способ уменьшить ее, чтобы я мог передать ее до окончательной задержкиоколо 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);

}

1 Ответ

0 голосов
/ 10 июня 2018

UG902: Руководство пользователя Vivado Design Suite Стр. 293. Поскольку функции уже переданы по конвейеру, добавление оптимизации DATAFLOW обеспечивает параллельное выполнение конвейерных функций.

Так что просто добавив#pragma HLS dataflow директива к вашему коду должна гарантировать, что вы обрабатываете одну выборку за такт с потоком данных между функциями.В результате задержка должна уменьшиться до 77-78k (что я предполагаю cols*rows).

...