FPGA图像处理之Shift-RAM Core 生成卷积模板(官方手册原理分析)

一、引言

        当我们进行图像处理算法时,进行均值滤波、中值滤波等相关的计算操作时,其中的核心部分应该就是矩阵运算了,需要生成图像像素矩阵,在C语言中,我们可以直接用数组表示,但是在使用FPGA进行图像处理时,verilog却无法实现这样的操作。那么在FPGA设计中,如果需要进行3*3的矩阵运算时又该如何处理呢,在理论上可以有以下三种方法使用:

        1、通过2个或者3RAM的存储来实现3*3像素窗口;

        2、通过2个或者3FIFO的存储来实现3*3像素窗口;

        3、通过2行或者3SHIFT-RAM的存储来实现3*3像素窗口;

        在使用RAMFIFO的进行矩阵运算的时候,其中的设计相对较为麻烦,如需要考虑在换行和换帧时的数据怎么处理。对于我们刚入行的新人来说,采用SHIFT-RAM无疑是更好的选择。

二、SHIFT-RAM

        SHIFT-RAM是一个IP核,在AlteraXilinx平台都有提供,下文以Altera平台的IP核为例进行讲解。SHIFT-RAM也就是移位寄存器,quartus中叫做Shift register(RAM based)它和普通的RAM功能比较相似,都可以进行数据缓存,但是通过IP核的配置,它可以实现数据多周期延时的缓存输出。以下以官方示例进行分析:

         上图是shift_ram的移位示意图,单看这幅图不能清楚的理解其中的原理,下面就按官方给的例程进行分析,在官方手册上提供了一个案例,配置如下表所示:

         数据输入输出宽度为8bittaps设置4行,选择每行宽度为3,选择使能和复位,按照这个要求进行仿真会得到如下波形:

        从中可以看出输入shiftin,使能信号与shiftin对齐,最后出来了taps0xtaps1xtaps2xtaps3x四组数据,其中 shiftout taps3x完全一致。

 

         官方通过以上的示意图对shift ip 核的工作原理进行了解释。可以看出shift_ram的工作方式是移位存储,后一个数据将前一个数据往前推,当填满一行的时候,跳到下一行再继续移位存储。通过这样的方式就可以把输入的 1 串数据变成平行输出的 4 串数据,那么再通过寄存器存储这个值,我们就很容易得到卷积矩阵。然后通过改变IP核的配置,我们就可以得到各种大小的卷积矩阵,用于进行图像算法的处理。

        本人也在学习阶段,有兴趣的朋友可以关注一下公众号,一起无限进步。

                                                

        ( 数据手册和后期资料在这里放出)

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值