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

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

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

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

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

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

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

文章目录

  • 基于FPGA的图像边缘检测系统(三)-设计实现
    • [基于FPGA的图像边缘检测系统(一)-原理](https://blog.csdn.net/Pieces_thinking/article/details/83150325)
    • [基于FPGA的图像边缘检测系统(二)-原理](https://blog.csdn.net/Pieces_thinking/article/details/83274412)
    • [基于FPGA的图像边缘检测系统(三)-设计实现](https://blog.csdn.net/Pieces_thinking/article/details/83275171)
  • 一、 背景介绍
  • 二、 设计要求
  • 三、 基本原理
    • 3.1 PLL
    • 3.2 OV7670
      • 3.2.1 I2C 时序 写入设计
      • 3.2.2 I2C 时序 读取设计
      • 3.2.3 IIC 调试总结
      • 3.2.4 OV7670 寄存器配置
      • 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 兵乓操作
  • 四、 设计方案
    • PLL模块
    • 矩阵键盘模块
    • 控制模块
    • OV7670配置模块
    • SCCB接口模块
    • OV7670采集模块
    • 滤波模块
    • 边缘检测模块
    • VGA驱动模块
  • 五、 设计实现
    • 5.1 硬件
    • 5.2 Verilog代码设计
  • 六、 仿真调试
  • 七、 板级调试
  • OVER
    • [基于FPGA的图像边缘检测系统(一)-原理](https://blog.csdn.net/Pieces_thinking/article/details/83150325)
    • [基于FPGA的图像边缘检测系统(二)-原理](https://blog.csdn.net/Pieces_thinking/article/details/83274412)
    • [基于FPGA的图像边缘检测系统(三)-设计实现](https://blog.csdn.net/Pieces_thinking/article/details/83275171)

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

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

一、 背景介绍

二、 设计要求

三、 基本原理

3.1 PLL

3.2 OV7670

3.2.1 I2C 时序 写入设计

3.2.2 I2C 时序 读取设计

3.2.3 IIC 调试总结

3.2.4 OV7670 寄存器配置

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 兵乓操作

四、 设计方案

  根据设计要求完成图像的采集、存储与显示,要用到的外设有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的图像边缘检测系统(三)-设计实现

本文分享自微信公众号 - OpenFPGA(OpenFPGA),作者:碎碎思

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    碎碎思
  • FPGA和外围接口-第一章 爱上FPGA

    FPGA是FieldProgrammable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物...

    碎碎思
  • 基于UDP/IP协议的电口通信(二)

    上一篇对整个UDP/IP协议的电口通信设计有个整体了解,接下来就是对于每个模块的设计,这部分,计划用两篇文章完成,会尽量简洁一点,谢谢大家支持。

    碎碎思
  • Python--import---语法-

    前文提到 import 指令是用来载入 module 的,如果需要,也会顺道做编译的事。但 import 指令,还会做一件重要的事情就是把 import 的那个...

    py3study
  • Java工具集-地区(LocaleUtils)

    cwl_java
  • 持续3分钟 - Java -10

    集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。

    子乾建建-Jeff
  • 2018-09-11Ubuntu arduino使用makeblock library

    在Downloads下找到Makeblock-Libraries-master剪切到/usr/share/arduino/libraries下,

    用户1733354
  • Mac os提高效率的几款工具

    Android studio/intellij idea:android动态调试。

    Jumbo
  • 【 源码之间 - Flutter 】 FutureBuilder源码分析

    现在回看_FutureBuilderState#initState中对_snapshot进行初始化时: 连接状态是none,数据是提供的初始数据,没有则为nu...

    张风捷特烈
  • 《Redis设计与实现》读书笔记(五) ——Redis中的整数集合

    《Redis设计与实现》读书笔记(五) ——Redis中的整数集合 (原创内容,转载请注明来源,谢谢) 一、概述 整数集合(intset)是redis数据结构集...

    用户1327360

扫码关注云+社区

领取腾讯云代金券