您当前的位置: 首页 >  矩阵

耐心的小黑

暂无认证

  • 1浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

FPGA丨设计行缓存(linebuffer)生成像素矩阵

耐心的小黑 发布时间:2021-03-27 19:07:27 ,浏览量:1

一、行缓存介绍

一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用FPGA内部的存储资源对像素行进行缓存与变换。

由于在图像处理过程中,经常需要对图像进行开窗。如在进行卷积操作时,我们需要将开窗得到的如3X3大小的局部图像数据与卷积核进行卷积运算,从而完成处理。而开窗操作需要使用行缓存来实现,因此下面就介绍一下行缓存是什么。 在这里插入图片描述 假如我们需要3X3的窗口,那么我们就需要设计3行行缓存。因为正常情况下,大多图像数据都是一行一行的,先从左到右,然后从上到下将每一个像素数据输出。如果不加处理,那么我们是不能得到3X3的图像窗口的,我们的最终目的应该是让一帧图像的三行数据对齐之后同时输出,这样我们才能得到3X3的图像窗口!!!

为了实现3行行缓存,由上图可知,我们就需要3个fifo。整体的思路就是,第一行数据依次输入进来写入fifo1,当写到第一行最后一个数据时,开始从fifo1依次读出数据然后写入fifo2,依次类推!!!就这样,当第四行数据到来的时候,此时三个fifo会同时输出数据,而输出的数据正是前三行数据且是对齐的。

二、程序设计

1、line_buffer

`timescale 1ns/1ps

module line_buffer (
        rst_n,
        clk,
        din,
        dout,
        valid_in,
        valid_out
    );

parameter WIDTH = 10;//数据位宽
parameter IMG_WIDTH = 480;//图像宽度

input  rst_n;
input  clk;
input  [WIDTH-1:0] din;
output [WIDTH-1:0] dout;
input  valid_in;//输入数据有效,写使能
output valid_out;//输出给下一级的valid_in,也即上一级开始读的同时下一级就可以开始写入

wire   rd_en;//读使能
reg    [8:0] cnt;//这里的宽度注意要根据IMG_WIDTH的值来设置,需要满足cnt的范围≥图像宽度

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        cnt             
关注
打赏
1640088279
查看更多评论
0.0545s