总:基于FPGA的OV7670摄像头显示 您所在的位置:网站首页 摄像头数据传输异常 总:基于FPGA的OV7670摄像头显示

总:基于FPGA的OV7670摄像头显示

2024-06-11 16:45| 来源: 网络整理| 查看: 265

目录

 

前言:

一、整体系统设计

二、各部分模块设计

1、时钟模块

2、OV7670初始化模块

3、DVP协议数据流模块

4、写FIFO模块

5、读FIFO模块

6、写FIFO控制模块

7、读FIFO控制模块

8、SDRAM控制模块

9、VGA控制模块

10、顶层模块

三、仿真测试

四、上板验证

五、总结

工程文件下载链接:https://download.csdn.net/download/qq_33231534/13010542

前言:

这个专题的博客中写的都是关于OV7670摄像头显示所需要的模块,并对每个模块进行仿真验证,最后再对每个模块进行整合,本篇就是对整个摄像头系统进行整合和汇总。在过程中遇到很多问题,应该也会是很多人会遇到的问题,涉及到调试和代码的问题,在下边也会加以讲解。

一、整体系统设计

如下系统框图:

图:整体系统框图

 如图所示,FPGA中主要模块包含:时钟模块、OV7670初始化模块、DVP协议数据流模块、写FIFO模块、写FIFO控制模块、SDRAM控制模块、读FIFO模块、读FIFO控制模块、VGA控制模块。

其中OV7670初始化模块、DVP协议数据流模块和VGA控制模块都在本专题博客中写过,这里不再赘述。写FIFO和读FIFO模块使用的IP核,都是宽度16位,长度256,其中读FIFO使用的是showahead模式。SDRAM控制器漆面的博客也写过,这边做了一些改动,添加了一些需要的信号。

其整体流程为:启动时先对摄像头进行初始化设置,初始化完成后,FPGA从摄像头获取一帧一帧的图像数据,根据数据手册将ov7670数据流转换成我们需要的RGB565数据流,随后存入写FIFO模块;(写控制模块)当写FIFO模块中存储的数据大于等于8时,发出SDRAM写请求,SDRAM写请求通过后,读取FIFO数据存储起来;(读FIFO模块)当读FIFO数据小于等于8时,读取SDRAM中的数据经过读FIFO缓存后送入VGA显示模块进行显示。同时写控制模块和读控制模块控制SDRAM读写地址的增加。

二、各部分模块设计 1、时钟模块

这里使用PLL的IP核,以50MHz时钟生成25MHz和100MHz时钟,其中摄像头初始化模块和VGA控制模块使用的是25MHz,SDRAM控制模块、写FIFO控制模块和读FIFO控制模块使用的是100MHz,写FIFO和读FIFO模块都是异步FIFO,使用25MHz和100MHz时钟。

2、OV7670初始化模块

前面博客讲的很详细,也没有改动,这里不再赘述。

3、DVP协议数据流模块

前面博客讲的很详细,也没有改动,这里不再赘述。

4、写FIFO模块

这里使用的IP核,数据宽度为16,长度为256,普通模式。

5、读FIFO模块

这里使用的IP核,数据宽度为16,长度为256,showahead模式。showahead模式是为了在读出FIFO数据时先出一个数据,和VGA显示的数据有效信号好对齐。

6、写FIFO控制模块

主要实现两个功能:

(1)当写FIFO中数据大于等于8时,向SDRAM控制器发出写请求信号

(2)发送SDRASM控制器写地址(行地址和列地址),当SDRAM控制器写完数据后,写地址进行相应变化。

代码如下:

// Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-09-27 12:44:59 // Revise Data : 2020-09-27 12:45:39 // File Name : wr_control.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : 写FIFO控制模块 module wr_control( input clk ,//100MHz input rst_n ,//系统复位 input [7:0] rdusedw ,//写FIFO中数据个数 input [9:0] row_addr_max ,//行地址最大 input [9:0] col_addr_max ,//列地址最大 input sdram_wdata_done,//SDRAM写数据结束标志 input aclr ,//一帧结束清零信号 output reg sdram_wr_en ,//SDRAM写使能信号 output reg [11:0] wr_row_addr ,//SDRAM 行地址 output reg [8:0] wr_col_addr //SDRAM 列地址 ); always @(posedge clk or negedge rst_n) begin if (!rst_n) begin sdram_wr_en =8) begin sdram_wr_en


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有