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
    +关注

    关注

    1655

    文章

    22282

    浏览量

    630059
  • 图像处理
    +关注

    关注

    28

    文章

    1340

    浏览量

    59163

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    缓存之美:万文详解 Caffeine 实现原理(上)

    文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍,首先会讲解它的实现原理,在大家对它有一个概念之后再深入具体源码的细节之中,理解它的设计理念,从中能学习
    的头像 发表于 08-05 14:49 512次阅读
    <b class='flag-5'>缓存</b>之美:万文详解 Caffeine 实现原理(上)

    高性能缓存设计:如何解决缓存伪共享问题

    缓存,引发无效化风暴,使看似无关的变量操作拖慢整体效率。本文从缓存结构原理出发,通过实验代码复现伪共享问题(耗时从3709ms优化至473ms),解析其底层机制;同时深入剖析高性能
    的头像 发表于 07-01 15:01 497次阅读
    高性能<b class='flag-5'>缓存</b>设计:如何解决<b class='flag-5'>缓存</b>伪共享问题

    FPGA的定义和基本结构

    专用集成电路( ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 简而言之, FPGA 就是一个可以通过编程来改变内部结构的芯片。
    的头像 发表于 05-15 16:39 2240次阅读
    <b class='flag-5'>FPGA</b>的定义和基本<b class='flag-5'>结构</b>

    cyusb3014 slave fifo模式In和Out缓存大小不一样时,显示错误怎么解决?

    cyusb3014 slave fifo 模式 In 和 Out 缓存大小设置不一样时(比如:U2P DMA缓存16K,P2U DMA缓存1K),可以测出来实际就是设置值,但在USB
    发表于 05-13 06:55

    MCU缓存设计

    MCU 设计通过优化指令与数据的访问效率,显著提升系统性能并降低功耗,其核心架构与实现策略如下: 一、缓存类型与结构 指令缓存(I-Cache)与数据缓存(D-Cache)‌ I-Ca
    的头像 发表于 05-07 15:29 826次阅读

    Nginx缓存配置详解

    Nginx 是一个功能强大的 Web 服务器和反向代理服务器,它可以用于实现静态内容的缓存缓存可以分为客户端缓存和服务端缓存
    的头像 发表于 05-07 14:03 1030次阅读
    Nginx<b class='flag-5'>缓存</b>配置详解

    智多晶FIFO_Generator IP介绍

    FIFO_Generator是智多晶设计的一款通用型FIFO IP。当前发布的FIFO_Generator IP是2.0版本,相比之前的1.1版本主要新增了非等比输入输出数据位宽支持和异步FI
    的头像 发表于 04-25 17:24 1462次阅读
    智多晶<b class='flag-5'>FIFO</b>_Generator IP介绍

    基于FPGAFIFO实现

    FIFO(First in First out)为先进先出队列,具有存储功能,可用于不同时钟域间传输数据以及不同的数据宽度进行数据匹配。如其名称,数据传输为单向,从一侧进入,再从另一侧出来,出来的顺序和进入的顺序相同。
    的头像 发表于 04-09 09:55 1166次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>FIFO</b>实现

    nginx中强缓存和协商缓存介绍

    缓存直接告诉浏览器:在缓存过期前,无需与服务器通信,直接使用本地缓存
    的头像 发表于 04-01 16:01 722次阅读

    AXI接口FIFO简介

    AXI接口FIFO是从Native接口FIFO派生而来的。AXI内存映射接口提供了三种样式:AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的应用外,AXI FIFO
    的头像 发表于 03-17 10:31 1769次阅读
    AXI接口<b class='flag-5'>FIFO</b>简介

    使用SCL编写FIFO功能块

    找到相关的指令。    其实要实现这个功能可直接使用SCL的编程方法编写一个这样的功能块就可以了,(在文章的结尾会为大家提供参考示例程序和SCL相关的学习资料,供有需要的朋友下载学习)。 二、FIFO功能的条件分析  1)设置一
    的头像 发表于 02-09 10:27 1138次阅读
    使用SCL编写<b class='flag-5'>FIFO</b>功能块

    FPGA图像处理基础----实现缓存卷积窗口

    像素行与像素窗口 一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用FPGA内部的存储资源对像
    的头像 发表于 02-07 10:43 1410次阅读
    <b class='flag-5'>FPGA</b>图像处理基础----实现<b class='flag-5'>缓存</b>卷积窗口

    缓存与不带缓存的固态硬盘有什么区别

    延迟、高可靠性和低噪音等优点,逐渐取代了传统的机械硬盘,成为市场的主流选择。而固态硬盘中的缓存技术,更是提升其性能的关键因素之一。本文将深入探讨固态硬盘的定义、结构、工作原理,以及带缓存与不带
    的头像 发表于 02-06 16:35 4265次阅读

    FIFO IP核的使用教程

    在数字设计中,利用FIFO进行数据处理是非常普遍的应用,例如,实现时钟域交叉、低延时存储器缓存、总线位宽调整等。下图给出了FIFO生成器支持的一种可能配置。
    的头像 发表于 01-03 09:36 4013次阅读
    <b class='flag-5'>FIFO</b> IP核的使用教程

    HTTP缓存头的使用 本地缓存与远程缓存的区别

    HTTP缓存头是一组HTTP响应头,它们控制浏览器和中间代理服务器如何缓存网页内容。合理使用HTTP缓存头可以显著提高网站的加载速度和性能,减少服务器的负载。 1. HTTP缓存头概述
    的头像 发表于 12-18 09:41 813次阅读