了解vivado hls中的行缓冲区概念

问题描述

我正在通过以hls实现的中值过滤器,该过滤器可以在https://cas.tudelft.nl/Education/courses/et4351/Median.pdf

中找到

这可能是一个愚蠢的问题,但是我无法理解行缓冲区的第一个元素是如何填充的。这是代码

void top_median(pix_t in_pix[MAX_HEIGHT][MAX_WIDTH],pix_t out_pix[MAX_HEIGHT][MAX_WIDTH],short int height,short int width)
{
#pragma HLS INTERFACE ap_vld register port=width
#pragma HLS INTERFACE ap_vld register port=height
#pragma HLS INTERFACE ap_fifo depth=2 port=out_pix
#pragma HLS INTERFACE ap_fifo depth=2 port=in_pix
 short int r,c; //row and col index
 pix_t pix,med,window[KMED*KMED],pixel[KMED];
 static pix_t line_buffer[KMED][MAX_WIDTH];
#pragma HLS ARRAY_PARTITION variable=line_buffer complete dim=1
 L1:for(r = 0; r < height; r++) {
 #pragma HLS LOOP_TRIPCOUNT min=600 max=1080 avg=720
 L2:for(c = 0; c < width; c++)
 {
#pragma HLS LOOP_TRIPCOUNT min=800 max=1920 avg=1280
#pragma HLS PIPELINE II=1 
// Line Buffers fill
 for(int i = 0; i < KMED-1; i++)
 {
 line_buffer[i][c] = line_buffer[i+1][c];///<--- This part of the line buffer(How are the initial pixel values stored))
 pixel[i] = line_buffer[i][c];
 }
 pix = in_pix[r][c];
 pixel[KMED-1]=line_buffer[KMED-1][c]=pix;
 // sliding window
 for(int i = 0; i < KMED; i++)
 for(int j = 0; j < KMED-1; j++)
window[i*KMED+j] = window[i*KMED+j+1];
 for(int i = 0; i < KMED; i++)
 window[i*KMED+KMED-1] = pixel[i];
 // Median Filter
 med = median(window);
 if v( (r>=KMED-1)&&(r<height)&&
 (c>=KMED-1)&&(c<=width) )
 pix = med;
 else
 pix = 0;
 if(r>0 && c>0)
 // KKMED == 1 for 3x3 window
 // KKMED == 2 for 5x5 window
 out_pix[r-KKMED][c-KKMED] = pix;
 } // end of L2 loop
 } // end of L1 loop
} // end of function

行缓冲区的初始填充不应该具有类似的逻辑

linebuf[i][c]= in_pix[r][c];

如果您有line_buffer[i][c] = line_buffer[i+1][c];之类的逻辑,我只是​​不理解如何存储这些值,这在行缓冲区被填充并且您要丢弃最早的样本后才有意义。 我也看到输入的像素值存储在

pix = in_pix[r][c];
 pixel[KMED-1]=line_buffer[KMED-1][c]=pix;

但是此存储发生在

之后
 // Line Buffers fill
 for(int i = 0; i < KMED-1; i++)
 {
 line_buffer[i][c] = line_buffer[i+1][c];
 pixel[i] = line_buffer[i][c];
 }

r=0 and c=0时linebuf中到底存在什么

有人可以帮助我了解其工作原理吗?在理解vivadohls中的2d卷积示例时,我遇到了同样的问题。

预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...