基于FPGA的图像边缘检测系统(三)-设计实现

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处:https://blog.csdn.net/Pieces_thinking https://blog.csdn.net/Pieces_thinking/article/details/83275171

基于FPGA的图像边缘检测系统(三)-设计实现

参考文献:手把手教你学FPGA设计:基于大道至简的至简设计法
基于VIP_Board Big的FPGA入门进阶及图像处理算法开发教程-V3.0
以上文章都可以点击进行下载
本系列文章如下:

基于FPGA的图像边缘检测系统(一)-原理

基于FPGA的图像边缘检测系统(二)-原理

基于FPGA的图像边缘检测系统(三)-设计实现

以下内容,请移步:
基于FPGA的图像边缘检测系统(一)-原理

基于FPGA的图像边缘检测系统(二)-原理

一、 背景介绍

二、 设计要求

三、 基本原理

3.1 PLL

3.2 OV7670

3.2.1 I2C 时序 写入设计

3.2.2 I2C 时序 读取设计

3.2.3 IIC 调试总结

3.2.4 OV7670 寄存器配置

以上内容,请移步:
基于FPGA的图像边缘检测系统(一)-原理

3.2.5 OV7670 寄存器配置2

3.2.6 视频信号分析

3.2.7 视频解码的 Verilog 实现

3.2.8 注意

3.3 灰度转换

3.3.1.基础

3.3.2.整数算法

3.3.3.整数移位算法

3.4 高斯滤波

3.5 边缘检测

3.6 兵乓操作

以上内容,请移步:
基于FPGA的图像边缘检测系统(二)-原理

四、 设计方案

  根据设计要求完成图像的采集、存储与显示,要用到的外设有OV7670、SDRAM和VGA。

  • 1) 摄像头OV7670
    在这里插入图片描述

2) SDRAM
  本次设计并没有采用上诉设计的乒乓操作,而是在SDRAM中实现两个BANK的伪乒乓操作,具体框图如下:
在这里插入图片描述
3) VGA
  VGA也是使用不需要配置交互架构。模块划分结果如图所示。
在这里插入图片描述
4)整体架构
在这里插入图片描述

PLL模块

  本功能用到了两个PLL。
  PLL1根据50M时钟,产生整个工程的主体时钟100M,以及送给OV7670的时钟25M。
  PLL2根据OV7670过来的PCLK时钟,产生OV7670同频同相的时钟,这个时钟作为采集模块和VGA驱动模块的时钟。

矩阵键盘模块

  矩阵键盘只用识别哪个按键按下。

控制模块

  控制模块负责整个工程的控制信息,此项目主要是控制边缘检测结果水线。

OV7670配置模块

  OV7670配置模块负责管理OV7670的寄存器的配置信号,决定了哪些寄存器要进行读、写操作。
  本模块内部包括有一个配置表,用户通过该表就可以定义寄存器配置。该配置表可以定义配置的长度以及每个寄存器的读写属性,其格式如下:

读写属性(2bit) 地址(8bit) 数据(8bit)

读写属性:0表示不操作;1表示写操作;2表示读操作;3表示先写后读操作。
地址:要操作的寄存器地址
数据:要操作到寄存器的数据,只有写时有效,读时无用。

  本模块根据配置表属性,产生相应的读写命令并发给下游模块。

SCCB接口模块

  SCCB接口模块处理OV7670相连的配置接口时序。接收上游模块的写命令,就产生写时序;接收上游模块的读时序,就产生读时序,并将读到的数据返回给上游模块。

OV7670采集模块

  OV7670采集模块负责采集图像数据。本工程采集的是640*480分辨率、RGB565格式的图像,图像速率是30帧/S。

1. 务必保证输出每一帧都是640*480的图像。
2. 务必能够自动从第一个像素开始采集。
3. 为了实现以上两点,当出错时,可以不用保证图像数据正确,但一定要满足以上两点。

滤波模块

  滤波模块负责图像数据的噪声滤波,滤去高斯噪声。

边缘检测模块

  边缘检测模块负责完成基于SOBEL算法的边缘检测,同时对结果做二值化处理,最后得到1个像素1比特的结果数据,数据送到存储控制模块。
存储控制模块
  边缘检测后的图像数据,首先将保存到内部的两个RAM当中。每个RAM可以保存1幅320*200的图像。本模块的工作方式为:

1.	图像数据开始时保存到RAM0,同时VGA从RAM1中读取图像数据进行显示。
2.	如果将整个图像数据写到RAM0后,等待VGA读完RAM1的数据。在等待期间,新到的图像数据将丢弃。
3.	当VGA读完RAM1的数据后,如果RAM0的1幅图像数据已经写完,将开始读取RAM0的数据进行显示。同时模块准备将新的图像数据写到RAM1当中,需要注意的是,新的图像数据必须从一幅图像的第一个数据开始写。
4.	RAM1和RAM0根据以上原则相互切换。也就是说:当写完一幅图像并且读完一幅图像时,才开始切换。

VGA驱动模块

  读取存储模块的数据并驱动到外部显示器进行显示。

五、 设计实现

5.1 硬件

在这里插入图片描述

5.2 Verilog代码设计

详见:https://github.com/suisuisi/FPGA_SOBLE_OV7670
  该部分代码没添加滤波模块,不过功能已经实现 ,后续还在修改。

六、 仿真调试

  由于代码及相关设计均参考相关资料,直接板级调试通过,所以没进行仿真。实际代码出现问题时需要进行相关的仿真。

七、 板级调试

在这里插入图片描述
          原图像

在这里插入图片描述
    检测之后图像

OVER

本系列教程结束,下面有福利,希望对您有帮助!!

基于FPGA的图像边缘检测系统(一)-原理

基于FPGA的图像边缘检测系统(二)-原理

基于FPGA的图像边缘检测系统(三)-设计实现

PS:福利 传送门:

资料包百度网盘:链接:[url=链接:https://pan.baidu.com/s/1n2u7JAFHksDY-Jknl5IHJw 密码:6i77

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Pieces_thinking/article/details/83275171