明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 7672|回复: 0

【基于FPGA的图像处理工程】边缘检测工程模块划分总结与分析

[复制链接]
发表于 2020-1-2 15:26:01 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【基于FPGA的图像处理工程】边缘检测工程模块划分总结与分析
作者:王斌
本文为明德扬原创文章,转载请注明出处!
很多朋友在工程模块划分的时候总会遇到很多问题,比如不知道如何下手、模块划分不合理等;当然我最初也和大家一样不知道如何下手,学习了明德扬的课程后,再加上和老师的多多交流,我也总结出了一套方法思路,今天就通过明德扬边缘检测工程来与大家分享一下模块的划分思路。
明德扬边缘检测工程是明德扬的网络班、就业班的其中一个项目,实现了图像的实时采集、边缘检测算法、存储控制以及与串口等功能,涉及到了比较全面的知识与算法。一起来看看如何划分模块。

一、模块划分要点总结
1、列出项目的功能要求(客户提出的产品功能要求)

2、画出硬件的系统结构框图(添加外设)

3、框图中每个外围接口都对应有一个接口转换模块
接口转换模块的作用是将外围器件的接口时序转为通用的接口时序,或者将通用接口时序转换为外围器件接口时序,这样使得FPGA内部其他模块不用再关心外围接口的时序了。
MDY规范通用接口时序:
l  data以及对应的vld,传输单个数据格式
l  MDY的包文格式,din,vld,SOP,EOP,MTY,ERR
l  wren,waddr,wdata;rden,raddr,rdata,rdata_vld

4、考虑是否涉及指令系统(操作码+数据格式)
上位机,例如PC,ARM,DSP或者其他的器件,只涉及到一个接口,但是却有很多指令或者命令功能要发送,因此就需要一个指令系统。
指令系统一定会涉及到命令、地址和数据。这种情况,肯定会有一个“寄存器解析模块”,根据命令、地址和数据,改变相应的寄存器的值。

5、考虑外围器件是否涉及寄存器配置
项目中有某些外设,上电工作前需要进行配置才能按要求工作。因此需要对外设内部寄存器进行读写,这一流程是通过FPGA来进行配置。
遇到这个情况,使用MDY推荐的模块寄存器配置结构:
寄存器配置表模块+寄存器读写配置模块+外设配置接口时序转换模块

6、根据实际情况,增加、补充或者拆分,优化对应模块,随时调整
原则:根据接口信号,看模块间是否方便对接。接口就决定了模块功能。所以在这一层的调整,一定要清楚接口的定义。

7、考虑是否涉及多路进一路出,要用FIFO
调度FIFO要考虑自身带宽能否满足多路一起突发发送时的数据量情况。如果带宽不满足,就要要输出给上游模块RDY信号。此时RDY信号有效取决于自己设置FIFO的Almost Full信号。如果带宽满足则不必设RDY信号。

8、考虑是否涉及到速率匹配问题,要加上RDY信号或者FIFO
首先考虑与外围器件通信的接口上是否需要rdy信号(FPGA内部运行频率往往与设接口速率不一致),然后考虑FPGA内部模块间数据带宽是否不一致,有等一等的情况。

二、边缘检测工程案例分析
根据前面总结的要点,通过实际项目案例来分析一下FPGA内部功能模块是怎样划分的。这里我们选取已经做过的图像边缘检测项目,接下来按照上面总结的模块划分步骤,一步步完成模块初步划分!

1.列出项目的功能要求
本项目功能要求:系统上电,OV7670摄像头将实时采集图像数据传送给FPGA,经过FPGA算法处理获得边缘图像,最终输出边缘图像到显示器上。
功能分析:
a)      选用摄像头OV7670作为图像采集
b)      摄像头内部寄存器需要上电配置,因此外设需要配置按键
c)      FPGA内部做边缘检测算法处理
d)      输出给显示器显示(用VGA接口)

2.画出硬件系统结构框图
根据步骤1总结出的功能要求,找到除FPGA外需要哪些外围器件。
外围器件总共需要三个:
a)     按键
b)     摄像头OV7670
c)     显示器
画出系统框图如下所示:
Snipaste_2019-11-19_14-48-17.png

3.框图中每个外围接口都对应有一个接口转换模块
a)      按键对应的接口转换模块是按键消抖检测模块;
b)      OV7670摄像头对应的接口转换模块是OV7670图像采集模块;
c)      显示器与FPGA连接是VGA接口,因此其对应的接口转换模块是VGA显示驱动模块。
完善后框图如下所示:
Snipaste_2019-11-19_15-24-45.png

4.考虑是否涉及指令系统
本项目不涉及指令系统,因此这里可以跳过。

5.考虑外围器件是否涉及寄存器配置
本项目中OV7670摄像头部分涉及寄存器配置。使用MDY推荐模板:寄存器配置表模块+寄存器读写配置模块+外设配置接口时序转换模块;
由于外设OV7670配置接口使用的是SCCB协议,所以外设配置接口时序转换模块对外接口也应该是SCCB,对内是MDY规范接口。
补充后框图如下所示:
Snipaste_2019-11-19_15-26-39.png

6.根据实际情况,增加、补充或者拆分独立对应模块,随时调整
到第6步,根据数据流向,需要对模块间的接口进行详细分析了,补充模块或者将功能相同的模块合并化简。
a)      OV7670图像采集模块输出的图像数据是RGB565格式,需要先将RGB565信号转成灰度图像,因此需要一个RGB转灰度模块;
b)      输出的图像灰度数据需要进行高斯滤波处理,因此需要一个高斯滤波模块;
c)      为了做边缘检测,需要将高斯滤波处理后的灰度图像数据转换为单bit数据,因此需要一个灰度转单bit模块;
d)      转换后的单bit数据,需要经过sobel算法处理才能得到图像边缘,因此需要一个sobel算法处理模块;
e)      经过sobel算法处理模块输出的图像数据就可以输出给显示器了,但是为了图像连续完整输出、不断帧,就需要做一下缓存,因此需要一个图像缓存模块。
补充后如下图所示:
Snipaste_2019-11-19_18-08-00.png

接下来将功能互斥、数据流向相关且接口一致的模块做合并化简处理,如下图所示:
Snipaste_2019-11-19_18-08-57.png
7.考虑是否涉及多路进一路出,要用FIF
本项目数据流方面没有涉及多路进一路出的问题,不需要考虑此处的FIFO问题。

8.考虑是否涉及到速率匹配问题,要加上RDY信号或者FIFO
首先考虑与外围器件通信的接口上是否需要rdy信号
OV7670配置接口采用的SCCB协议,运行频率是100K,远小于FPGA内部系统运行频率25M,所以外设配置接口时序转换模块与配置模块间需要设rdy信号。

再考虑FPGA内部模块间运行速率不匹配的情况
sobel算法处理模块输出的图像数据发送给图像缓存模块,图像缓存模块要缓存一幅完整图像需要等待,需要设一个FIFO。
为了完成乒乓操作,需要设立两个FIFO才能实现写FIFO A一幅完整图像数据,同时VGA显示驱动模块可以读缓存好的FIFO B内完整图像数据。
因此图像缓存模块需要设两个FIFO(实际项目中用片内RAM代替了FIFO,本质相同)。
最终得到的模块图如下所示:
Snipaste_2019-11-23_21-32-03.png
到此,根据模块划分步骤一步步做下来,图像边缘检测工程的模块划分雏形初步已经完成。具体实践中需要根据FPGA内部信号的调整,随时拆分或独立来增减功能模块。
以上就是我们做模块划分的基本思路,大家有什么问题可以加Q群544453837进行交流,更多FPGA相关资料可以登录明德扬论坛进行学习浏览:http://www.fpgabbs.cn/

加QQ:1744527324,获取更多FPGA资料!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-4-20 04:06 , Processed in 0.052091 second(s), 25 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表