一、引言
当我们进行图像处理算法时,进行均值滤波、中值滤波等相关的计算操作时,其中的核心部分应该就是矩阵运算了,需要生成图像像素矩阵,在C语言中,我们可以直接用数组表示,但是在使用FPGA进行图像处理时,verilog却无法实现这样的操作。那么在FPGA设计中,如果需要进行3*3的矩阵运算时又该如何处理呢,在理论上可以有以下三种方法使用:
1、通过2个或者3个RAM的存储来实现3*3像素窗口;
2、通过2个或者3个FIFO的存储来实现3*3像素窗口;
3、通过2行或者3行SHIFT-RAM的存储来实现3*3像素窗口;
在使用RAM和FIFO的进行矩阵运算的时候,其中的设计相对较为麻烦,如需要考虑在换行和换帧时的数据怎么处理。对于我们刚入行的新人来说,采用SHIFT-RAM无疑是更好的选择。
二、SHIFT-RAM
SHIFT-RAM是一个IP核,在Altera和Xilinx平台都有提供,下文以Altera平台的IP核为例进行讲解。SHIFT-RAM也就是移位寄存器,quartus中叫做Shift register(RAM based),它和普通的RAM功能比较相似,都可以进行数据缓存,但是通过IP核的配置,它可以实现数据多周期延时的缓存输出。以下以官方示例进行分析:
上图是shift_ram的移位示意图,单看这幅图不能清楚的理解其中的原理,下面就按官方给的例程进行分析,在官方手册上提供了一个案例,配置如下表所示:
数据输入输出宽度为8bit,taps设置4行,选择每行宽度为3,选择使能和复位,按照这个要求进行仿真会得到如下波形:
从中可以看出输入shiftin,使能信号与shiftin对齐,最后出来了taps0x,taps1x,taps2x,taps3x四组数据,其中 shiftout和 taps3x完全一致。
官方通过以上的示意图对shift ip 核的工作原理进行了解释。可以看出shift_ram的工作方式是移位存储,后一个数据将前一个数据往前推,当填满一行的时候,跳到下一行再继续移位存储。通过这样的方式就可以把输入的 1 串数据变成平行输出的 4 串数据,那么再通过寄存器存储这个值,我们就很容易得到卷积矩阵。然后通过改变IP核的配置,我们就可以得到各种大小的卷积矩阵,用于进行图像算法的处理。
本人也在学习阶段,有兴趣的朋友可以关注一下公众号,一起无限进步。
文章来源:https://www.toymoban.com/news/detail-409191.html
( 数据手册和后期资料在这里放出)文章来源地址https://www.toymoban.com/news/detail-409191.html
到了这里,关于FPGA图像处理之Shift-RAM Core 生成卷积模板(官方手册原理分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!