在 Vivado HLS 上裁剪图像边缘

时间:2021-02-12 14:10:51

标签: c++ for-loop if-statement vivado vivado-hls

我需要在 Vivado HLS 上裁剪出图像的前 20 列和后 10 列。

Top Level Function:
#include "video_crop.h"
#include <math.h>

//Top Level Function
void video_crop(AXI_STREAM& s_axis_video,AXI_STREAM& m_axis_video, int hsize_in, int vsize_in)
{
#pragma HLS INTERFACE axis register both port=s_axis_video
#pragma HLS INTERFACE axis register both port=m_axis_video
    
    ap_axiu<24, 1, 1, 1> video;
    
    for(int i = 0; i < vsize_in ; i ++)
      {
             for(int j = 0; j < hsize_in ; j ++)
             {
                     s_axis_video >> video;

                     if(j<hsize_in-10) //to crop the last 10 columns
                     {
                       if(j>=hsize_in-80) //to crop the first 20 columns
                       {
                            m_axis_video << video;
                       }
                     }
              }
      }
}

嵌套 IF 的第一个 IF 语句不会导致任何问题,但第二个 IF 语句会导致 RTL Simulation Hanging。想寻求帮助解决此问题。

在我的例子中,hsize_in 和 vsize_in 是 100,所以在第一个 IF 语句中,当 j=hsize_in-80 时, 最后 10 列和前 20 列将被裁剪。

如果列数(j)同时满足IF条件,即列数小于90且列数大于等于20,则输入应写入输出视频。

然而它会导致一个警告:Hls::stream 'hls::stream >.2' 在空时被读取,这可能会导致 RTL 模拟挂起。

我怀疑问题是:在第二个 IF 条件下,当我裁剪前 20 列时,第 20 列中的信息必须写入输出的第 0 列 - 这不会发生。 我认为输入的第 20 列中的信息正在写入输出的第 20 列,因此,输出的前 20 列是空的。

我该如何解决这个问题?

我附上了下面的测试台。

test bench


第二个 IF 语句导致 RTL 挂起,希望得到一些帮助来解决这个问题。

0 个答案:

没有答案
相关问题