凡亿专栏 | FPGA图像处理之行缓存(linebuffer)的设计二
FPGA图像处理之行缓存(linebuffer)的设计二

FPGA图像处理之行缓存(linebuffer)的设计二

作者:OpenS_Lee

01

背景知识


    在FPGA数字图像处理中,行缓存的使用非常频繁,例如我们需要图像矩阵操作的时候就需要进行缓存,例如图像的均值滤波,中值滤波,高斯滤波以及sobel边缘查找等都需要行缓存设计。这里的重要性就不在赘述。

02

FPGA实现


219223df5c467542a3a738e111b223.png


图1 行缓存菊花链结构

如图1所示,我们要设计n行同时输出,就串联n行。Line_buffer的大小设置由图像显示行的大小(图像宽度)决定。例如480*272 (480)。下面我们将采用更加灵活的方法来设计行缓存(linebuffer),使用fifo来设计。

5cb4a84cd1122e09b8cb2221f27964.png

 

图2 Hierarchy

  如图2所示,我们设计了3行行缓存,总共使用了三个fifo。

FPGA源码

1  line_buffer_top模块

 

c65bfde8f0f5c51918cf29f5280248.jpg

3c1ef3c585dba5e7609e6fa4bd0786.jpg

 

如果我们需要缓存5行,7行或更多只需要增加i。这样使得我们的设计更加容易移植和维护。

2 line_buffer 模块

 

8cdd5984bc5a3a2a6a575573d25a1a.jpg

f94144bf595045e921e89a4c2de4d7.jpg


如果需要移植到其他FPGA芯片我们只需要将FIFO替换,或者修改scfifo_component.intended_device_family = "Cyclone IV E"为相应的器件。

RTL viewer

 

fcfc41a2a8c1235164419b835d8568.jpg


                                    图3 RTL图

如图3所示,整个linebuffer由3个line_buffer组成,最终输出3行缓存数据。

仿真顶层:

 

9909438e18a0e5929e97f257cf9a72.jpg

18974a1c250381ea17341c49176b7c.jpg


仿真结果

 

8ba5ae89bb4635954d0aec5deedfbf.png


图4 整体仿真效果

 

b4e897ea84278ecc5ea628f39c4499.jpg


图5 数据对齐输出

设计成功。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论