0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习-基于FIFO的行缓存结构

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-05-10 09:59 次阅读

像素行与像素窗口

一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用FPGA内部的存储资源对像素行进行缓存与变换。由于在图像处理过程中,经常会使用到卷积,因此需要对图像进行开窗,然后将开窗得到的局部图像与卷积核进行卷积,从而完成处理。

图像数据一般按照一定的格式和时序进行传输,在我进行实验的时候,处理图像时,让其以VGA的时序来进行工作,这样能够为我处理行缓存提供便利。

基于FIFO的行缓存结构

4d8ab88a-d003-11ec-bce3-dac502259ad0.png

在FPGA中对图像的一行数据进行缓存时,可以采用FIFO这一结构,如上图所示,新一行图像数据流入到FIFO1中,FIFO1中会对图像数据进行缓存,当FIFO1中缓存有一行图像数据时,在下一行图像数据来临的时候,将FIFO1中缓存的图像数据读出,并传递给下一个FIFO,于此同时,将新一行的图像数据缓存到FIFO1中,这样就能完成多行图像的缓存。

若要缓存多行图像,下面的菊花链式的结果更能够直观地表现图像数据地流向。

4da3f0f2-d003-11ec-bce3-dac502259ad0.png

新输入地图像缓存到FIFO1当中,当FIFO中缓存有一行数据的时候,下一个输入像素来临的时候,会将数据从本FIFO中读出,并给到下一个FIFO,来形成类似于一个流水线的结构。

上面的图中,就是实现一个5X5大小的窗口的一个结构图。

代码设计

实现一个可以生成任意尺寸大小的开窗的模块,需要注意参数的使用,可以通过调节KSZ来调整窗口的大小。最终将窗口中的图像像素,转换成一个一维的数据输出给到下一个模块。

在设计的时候,对于FIFO要选择精准计数模式,这样才能让流水正常工作起来。

在代码中通过generate语句来实现多个line_buffer的例化,line buffer的个数可以根据卷积窗口的大小来选择,例如3X3大小的卷积窗口需要缓存两行,5X5大小的卷积窗口需要缓存4行,可以通过设置参数来选择要例化多少个line_buffer。

4dbe4a06-d003-11ec-bce3-dac502259ad0.png

时序设计

4dd01cfe-d003-11ec-bce3-dac502259ad0.png

在设计FIFO的菊花链结构时,需要根据当前FIFO中存储的数据个数来判断,这时候使用到精准计数模式,可以反应FIFO中的存储的数据。当FIFO中存储有一行数据的时候,使能pop_en信号,表示当前可以将数据从FIFO中读出。

在将数据写入到FIFO中的时候,需要对数据进行扩充,也即需要对输入的图像的边界补充数据,因为进行卷积之后的图像将会比原始图像数据尺寸减少,因此在形成卷积窗口时,将图像扩充,能够让图像处理完成之后,保持原来的尺寸,只是会在边界出现黑边。

win_buf这个模块的最终输出,就是一个矩阵内的所有像素,组成一个信号输出到外部,供进行卷积的处理。

4de75cfc-d003-11ec-bce3-dac502259ad0.png

4dfd3586-d003-11ec-bce3-dac502259ad0.png

4e222b66-d003-11ec-bce3-dac502259ad0.png

4e352892-d003-11ec-bce3-dac502259ad0.png

4e52d77a-d003-11ec-bce3-dac502259ad0.png

4e720ef6-d003-11ec-bce3-dac502259ad0.png

4e94a31c-d003-11ec-bce3-dac502259ad0.png

4eac8b26-d003-11ec-bce3-dac502259ad0.png

4ec1763a-d003-11ec-bce3-dac502259ad0.png

4ed810f2-d003-11ec-bce3-dac502259ad0.png

4f0223c4-d003-11ec-bce3-dac502259ad0.png

4f178a48-d003-11ec-bce3-dac502259ad0.png

4f30dc6e-d003-11ec-bce3-dac502259ad0.png

4f4959a6-d003-11ec-bce3-dac502259ad0.png

仿真验证

4f5fbd72-d003-11ec-bce3-dac502259ad0.png

输入的第三行数据的前三个数据是:0x00,0x78,0x7c

输入的第二行数据的前三个数据是:0x00,0x7d,0x7d

输入的第一行数据的前三个数据是:0x00,0x7e,0x7f

输出的第一个矩阵的值是:0x0078_7c00_7d7d_007e_7f

输入行数据第一个数据是0x00这是因为扩充了边界的原因。

可以看到,设置KSZ为3,可以得到一个位宽为72bit的输出数据,该数据包含了一个窗口中的9个数据。

5X5开窗

4f813506-d003-11ec-bce3-dac502259ad0.png

设置开窗大小为5x5之后,也可以看到输出信号的位宽变为了8*25=200bit,也就是一个5X5大小的矩阵中的数据。

输入的第5行数据的前5个数据是:0x00,0x00,0x7e,0x7c,0x7f

输入的第4行数据的前5个数据是:0x00,0x00,0x7e,0x7e,0x7e,

输入的第3行数据的前5个数据是:0x00,0x00,0x78,0x7c,0x7c

输入的第2行数据的前5个数据是:0x00,0x00,0x7d,0x7d,0x7a

输入的第1行数据的前5个数据是:0x00,0x00,0x7e,0x7f,0x7d

从输出结果看,输出的矩阵数据,刚好是这5行的前5数据,并且前两个数据是0x00,这是因为在每一行前面补充了两个0的原因。

经过测试,这种开窗算子是能够完成任意此村的开窗的。

实际应用

在实际应用中,我也将这个模块正确地使用上了,完成了一个3x3的sobel算子和5x5的均值滤波。

原始图像

4fa373be-d003-11ec-bce3-dac502259ad0.png

3x3 Sobel

4fdb32ea-d003-11ec-bce3-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21309

    浏览量

    593133
  • 图像处理
    +关注

    关注

    26

    文章

    1224

    浏览量

    55814

原文标题:FPGA学习-图像处理基础实现缓存卷积窗口

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    异步FIFO结构设计

    电子发烧友网站提供《异步FIFO结构设计.pdf》资料免费下载
    发表于 02-06 09:06 0次下载

    FPGA学习-异步FIFO原型设计与验证

      点击上方 蓝字 关注我们   第一节:fifo基础     内容: 1. 掌握FPGA设计中关于数据缓存的使用 2. 掌握FIFO工作原理
    的头像 发表于 11-17 14:00 215次阅读

    基于循环队列的FIFO缓存实现

    FIFO缓存是介于两个子系统之间的弹性存储器,其概念图如图1所示。它有两个控制信号,wr和rd,用于读操作和写操作。当wr被插入时,输入的数据被写入缓存,此时读操作被忽视。FIFO
    的头像 发表于 09-11 10:12 443次阅读
    基于循环队列的<b class='flag-5'>FIFO</b><b class='flag-5'>缓存</b>实现

    一种简单的、真实的基于循环序列的FIFO缓存设计

    FIFO缓存是介于两个子系统之间的弹性存储器,其概念图如图1所示。它有两个控制信号,wr和rd,用于读操作和写操作
    发表于 09-11 09:12 270次阅读
    一种简单的、真实的基于循环序列的<b class='flag-5'>FIFO</b><b class='flag-5'>缓存</b>设计

    基于循环队列的FIFO缓存设计实现

    FIFO缓存是介于两个子系统之间的弹性存储器,其概念图如图1所示。它有两个控制信号,wr和rd,用于读操作和写操作。
    发表于 09-08 09:06 261次阅读
    基于循环队列的<b class='flag-5'>FIFO</b><b class='flag-5'>缓存</b>设计实现

    XILINX FPGA IP之FIFO Generator例化仿真

    上文XILINX FPGA IP之FIFO对XILINX FIFO Generator IP的特性和内部处理流程进行了简要的说明,本文通过实际例子对该IP的使用进行进一步的说明。本例子例化一个读数据位宽是写数据位宽两倍的
    的头像 发表于 09-07 18:31 898次阅读
    XILINX <b class='flag-5'>FPGA</b> IP之<b class='flag-5'>FIFO</b> Generator例化仿真

    XILINX FPGA IP之FIFO Generator

    在数字设计中,fifo是数据操作任务所需的普遍结构,如跨时钟域、低延迟内存缓冲和总线宽度转换。
    的头像 发表于 09-07 18:31 639次阅读
    XILINX <b class='flag-5'>FPGA</b> IP之<b class='flag-5'>FIFO</b> Generator

    FPGA学习笔记:FIFO IP核的使用方法

    FIFO(First In First Out, 先入先出 ),是一种数据缓冲器,用来实现数据先入先出的读写方式。数据按顺序写入 FIFO,先被写入的数据同样在读取的时候先被读出,所以 FIFO存储器没有地址线,有一个写端口和一
    的头像 发表于 09-07 18:30 962次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>学习</b>笔记:<b class='flag-5'>FIFO</b> IP核的使用方法

    深度解析CPLD和FPGA内部结构和原理

    大多数FPGA都具有内嵌的块RAM,这大大拓展了FPGA的应用范围和灵活性。块RAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。RAM、
    发表于 08-29 10:14 1630次阅读
    深度解析CPLD和<b class='flag-5'>FPGA</b>内部<b class='flag-5'>结构</b>和原理

    FPGA FIFO深度计算的基本步骤和示例

    FIFO(First In First Out)是一种先进先出的存储结构,经常被用来在FPGA设计中进行数据缓存或者匹配传输速率。
    的头像 发表于 08-07 15:39 510次阅读

    使用IP核创建单时钟FIFO

    被写入FIFO中,然后FPGA再以UART串口通信依次将数据发送出去。因为传感器采集数据的速度很快,比如当传感器使用SPI通信协议,以2M的SPI数据速率读取时,串口使用9600的波特率肯定跟不上,因此需要先将从传感器处采集的数据使用F
    的头像 发表于 07-23 11:47 392次阅读
    使用IP核创建单时钟<b class='flag-5'>FIFO</b>

    同步FIFO设计详解及代码分享

    FIFO (先入先出, First In First Out )存储器,在 FPGA 和数字 IC 设计中非常常用。 根据接入的时钟信号,可以分为同步 FIFO 和异步 FIFO
    发表于 06-27 10:24 1317次阅读
    同步<b class='flag-5'>FIFO</b>设计详解及代码分享

    FPGA零基础学习之Vivado-FIFO使用教程

    大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白
    发表于 06-16 17:50

    FPGA零基础学习之Vivado-FIFO使用教程

    用来做数据的缓存,或者用来解决高速异步数据的交互,即解决了跨时钟域的问题。此外,FIFO还有一个特点,就是数据被读出之后就不存在了,不像RAM和ROM一样,数据被读出后还存在。所以我们如果想进行多次的读,那么就需要进行同样次数的写。
    的头像 发表于 06-09 09:38 2332次阅读
    <b class='flag-5'>FPGA</b>零基础<b class='flag-5'>学习</b>之Vivado-<b class='flag-5'>FIFO</b>使用教程

    怎样设计一个同步FIFO?(1)

    今天咱们开始聊聊FIFO的设计。FIFO是一个数字电路中常见的模块,主要作用是数据产生端和接受端在短期内速率不匹配时作为数据缓存FIFO是指First In, First Out,即
    的头像 发表于 05-04 15:48 572次阅读