私はVivadoHLS2015.4でイメージを使用しています。
約311774クロックサイクルという非常に高いレイテンシーが発生しています。プログラムは2つの入力画像を取得し、RGBからグレーに変換するだけですが。全体的な待ち時間は、私は3つのすべてのために77-78kの待ち時間を取得していますよう311774である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);
}
UG902:Vivado DesignSuiteユーザーガイドP.293:関数はすでにパイプライン化されているため、DATAFLOW最適化を追加すると、パイプライン化された関数が並列に実行されます。
したがって、#pragma HLS dataflow
ディレクティブをコードに追加するだけで、関数間のデータフローを使用して、クロックごとに1つのサンプルを処理していることを確認できます。結果として、レイテンシーは77-78kに減少するはずです(私が想定しているのはcols*rows
)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加