FPGA之OV7725摄像头采集与VGA显示实验--3--摄像头配置模块实现(Verilog代码)
上一节向大家介绍了摄像头配置的SCCB协议发送器的Verilog实现,这一节则向大家介绍配置信息存储模块:ovcfg_info的Verilog实现。
学习目标
- 配置模块Verilog实现
系统框图
从图中我们可以看到,ov7725_cfg模块的作用类似一个存储器,根据SCCB模块输出的 i2c_clk 与done,确定输送进SCCB模块地址接口和数据接口的数据。
因此我们可以有一个思路出现:首先数据的更新要赶在TRAN1状态之前,而恰好在STOP3状态结束的后四分之一周期,done信号发生一个跳变。因此可以用触发器检测done信号对数据进行计数。
代码实现
接口
sys_resetn | 复位信号 |
i2c_clk | 触发时钟信号 |
done | 配置完成信号 |
i2c_addr | 地址数据输出 |
i2c_data | 配置参数输出 |
Verilog代码
/*
By WWD 2022/9/3
OV7725 cfg V1.0
转载请注明出处!
*/
module ovcfg_info(
input wire i2c_clk,
input wire sys_resetn,
input wire done,
output wire [7:0] i2c_addr,
output wire [7:0] i2c_data
);
reg[6:0] info_cnt;
wire[15:0] cfg_data_reg [68:0];
assign cfg_data_reg[00] = {8'h3d, 8'h03};
assign cfg_data_reg[01] = {8'h15, 8'h00};
assign cfg_data_reg[02] = {8'h17, 8'h23};
assign cfg_data_reg[03] = {8'h18, 8'ha0};
assign cfg_data_reg[04] = {8'h19, 8'h07};
assign cfg_data_reg[05] = {8'h1a, 8'hf0};
assign cfg_data_reg[06] = {8'h32, 8'h00};
assign cfg_data_reg[07] = {8'h29, 8'ha0};
assign cfg_data_reg[08] = {8'h2a, 8'h00};
assign cfg_data_reg[09] = {8'h2b, 8'h00};
assign cfg_data_reg[10] = {8'h2c, 8'hf0};
assign cfg_data_reg[11] = {8'h0d, 8'h41};
assign cfg_data_reg[12] = {8'h11, 8'h00};
assign cfg_data_reg[13] = {8'h12, 8'h06};
assign cfg_data_reg[14] = {8'h0c, 8'hd0};
assign cfg_data_reg[15] = {8'h42, 8'h7f};
assign cfg_data_reg[16] = {8'h4d, 8'h09};
assign cfg_data_reg[17] = {8'h63, 8'hf0};
assign cfg_data_reg[18] = {8'h64, 8'hff};
assign cfg_data_reg[19] = {8'h65, 8'h00};
assign cfg_data_reg[20] = {8'h66, 8'h00};
assign cfg_data_reg[21] = {8'h67, 8'h00};
assign cfg_data_reg[22] = {8'h13, 8'hff};
assign cfg_data_reg[23] = {8'h0f, 8'hc5};
assign cfg_data_reg[24] = {8'h14, 8'h11};
assign cfg_data_reg[25] = {8'h22, 8'h98};
assign cfg_data_reg[26] = {8'h23, 8'h03};
assign cfg_data_reg[27] = {8'h24, 8'h40};
assign cfg_data_reg[28] = {8'h25, 8'h30};
assign cfg_data_reg[29] = {8'h26, 8'ha1};
assign cfg_data_reg[30] = {8'h6b, 8'haa};
assign cfg_data_reg[31] = {8'h13, 8'hff};
assign cfg_data_reg[32] = {8'h90, 8'h0a};
assign cfg_data_reg[33] = {8'h91, 8'h01};
assign cfg_data_reg[34] = {8'h92, 8'h01};
assign cfg_data_reg[35] = {8'h93, 8'h01};
assign cfg_data_reg[36] = {8'h94, 8'h5f};
assign cfg_data_reg[37] = {8'h95, 8'h53};
assign cfg_data_reg[38] = {8'h96, 8'h11};
assign cfg_data_reg[39] = {8'h97, 8'h1a};
assign cfg_data_reg[40] = {8'h98, 8'h3d};
assign cfg_data_reg[41] = {8'h99, 8'h5a};
assign cfg_data_reg[42] = {8'h9a, 8'h1e};
assign cfg_data_reg[43] = {8'h9b, 8'h3f};
assign cfg_data_reg[44] = {8'h9c, 8'h25};
assign cfg_data_reg[45] = {8'h9e, 8'h81};
assign cfg_data_reg[46] = {8'ha6, 8'h06};
assign cfg_data_reg[47] = {8'ha7, 8'h65};
assign cfg_data_reg[48] = {8'ha8, 8'h65};
assign cfg_data_reg[49] = {8'ha9, 8'h80};
assign cfg_data_reg[50] = {8'haa, 8'h80};
assign cfg_data_reg[51] = {8'h7e, 8'h0c};
assign cfg_data_reg[52] = {8'h7f, 8'h16};
assign cfg_data_reg[53] = {8'h80, 8'h2a};
assign cfg_data_reg[54] = {8'h81, 8'h4e};
assign cfg_data_reg[55] = {8'h82, 8'h61};
assign cfg_data_reg[56] = {8'h83, 8'h6f};
assign cfg_data_reg[57] = {8'h84, 8'h7b};
assign cfg_data_reg[58] = {8'h85, 8'h86};
assign cfg_data_reg[59] = {8'h86, 8'h8e};
assign cfg_data_reg[60] = {8'h87, 8'h97};
assign cfg_data_reg[61] = {8'h88, 8'ha4};
assign cfg_data_reg[62] = {8'h89, 8'haf};
assign cfg_data_reg[63] = {8'h8a, 8'hc5};
assign cfg_data_reg[64] = {8'h8b, 8'hd7};
assign cfg_data_reg[65] = {8'h8c, 8'he8};
assign cfg_data_reg[66] = {8'h8d, 8'h20};
assign cfg_data_reg[67] = {8'h0e, 8'h65};
assign cfg_data_reg[68] = {8'h09, 8'h00};
always@(posedge i2c_clk or negedge sys_resetn)begin
if(sys_resetn == 1'b0)
info_cnt <= 7'd0;
else if(info_cnt == 7'd69)
info_cnt <= 7'd0;
else if(done == 1'b1)
info_cnt <= info_cnt +7'd1;
end
assign i2c_addr = cfg_data_reg[info_cnt][15:8];
assign i2c_data = cfg_data_reg[info_cnt][7:0];
endmodule
测试验证
TB文件
/*
By WWD 2022/9/3
转载请注明出处
*/
`timescale 1ns/1nsmodule tb_topovcfg();reg sys_reset_n;
reg sys_clk;
reg i2c_start;wire i2c_clk;
wire done;
wire [7:0] i2c_addr;
wire [7:0] i2c_data;initial beginsys_reset_n = 1'b0;
sys_clk = 1'b1;
i2c_start = 1'b0;
#20i2c_start = 1'b1;sys_reset_n = 1'b1;/*#2000byte_addr = 8'b1000_1111;i2c_data = 8'b1111_0100;*/
endalways #10 sys_clk = ~sys_clk; //50MHz时钟SCCB u1(
.sys_reset_n(sys_reset_n),
.sys_clk(sys_clk),
.i2c_start(i2c_start),
.byte_addr(i2c_addr),
.i2c_data(i2c_data),
.i2c_clk(i2c_clk),
.done(done),
.SDA(),
.SCL()
); ovcfg_info u2(
.i2c_clk(i2c_clk),
.sys_resetn(sys_reset_n),
.done(done),
.i2c_addr(i2c_addr),
.i2c_data(i2c_data)
);endmodule
Modelsim波形图
我们随意验证第一组数据与第二组数据:
assign cfg_data_reg[00] = {8'h3d, 8'h03};
assign cfg_data_reg[01] = {8'h15, 8'h00};
发现完全符合要求!
并且可以看到,当计数到68后,计数器归零,并且对应数据完全正确。
这里留给大家一个小任务,请大家改造这个模块,使得配置的过程只经历一遍。
下一节,我们将介绍如何设计OV7725的数据采集模块,敬请期待!
FPGA之OV7725摄像头采集与VGA显示实验--3--摄像头配置模块实现(Verilog代码)相关推荐
- FPGA之OV7725摄像头采集与VGA显示实验--2--SCCB协议发送器实现(Verilog代码)
上一节学习了OV7725的配置协议SCCB,且该协议几乎与一致,大家可能会疑惑应答位的问题,实际上SCCB协议虽说不关心,但是还是会把SDA拉低:这一节我们将讲解OV7725配置模块中SCCB发送器的 ...
- FPGA之OV7725摄像头采集与VGA显示实验--4--摄像头数据输出VAG协议分析
大家好,前面几节给大家介绍了OV7725摄像头通过SCCB协议进行配置的内容,这一节我们来聊一下关于OV7725摄像头的VAG协议的知识,为后面的数据采集模块做铺垫. 学习目标 理解VGA协议传输数据 ...
- FPGA--(基于Quartus的FPAG程序下载与固化教程)VGA显示实验之上板测试
本节内容旨在教会大家如何下载程序进入FPGA并且验证我们前几节所做的VGA显示实验. 材料 EP4CE10F17C8N FPGA .USB_Blaster 下载器 完整Verilog代码.Quartu ...
- 【接口协议】FPGA 驱动 VGA 显示实验(二)实验设计部分
目录 实验任务 实验环境 实验设计 程序设计 VGA 时序模块 模块框图 仿真波形 顶层模块 约束文件 实验任务 利用FPGA驱动VGA实现彩条显示,分辨率为800 × 600@60Hz,分别显示三种 ...
- 【Verilog】基于FPGA的五子棋小游戏(VGA显示、双人对战、胜负判别、附完整代码)
基于FPGA的五子棋小游戏 有一些说明: 1.本文是基于VGA的显示小游戏,主要为VGA显示的拓展应用: 2.为适应不同显示屏的分辨率,棋盘确定为10X10的黑线白底的方格: 3.下棋主要用棋格颜色变 ...
- 基于FPGA的VGA显示实验
VGA驱动原理 信号线 定义 HS 行同步信号(3.3V 电平) VS 场同步信号(3.3V 电平) R 红基色 (0~0.714V 模拟信号) G 绿基色 (0~0.714V 模拟信号) B 蓝基色 ...
- FPGA实现VGA显示(五)——————配置ROM测试及图片显示(b)
如何使用ISE生成ROMip显示彩色图片 这里设置宽度,这里深度设置设置的是9200,设置的时候进行简单计算. 例化可以直接得到,修改内部连线即可 ROM简单测试总结 前面显示代码其实是有问题的,因为 ...
- 树莓派摄像头在桌面不显示 | 树莓派VNC摄像头实时显示
背景 以前连接树莓派一直用SSH连接,生成的图像结果也都是保存以后再看.导师说想看实时Demo,我想这用VNC用网线直接连接就显示了.教程:树莓派有线SSH连接电脑(PC开发+树莓派调试+管理文件) ...
- 【正点原子FPGA连载】第四十三章MT9V034摄像头RGB-LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- 【正点原子FPGA连载】第四十九章OV5640摄像头HDMI灰度显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
最新文章
- pipe 双管道 简易实现代码
- Anti-If: The missing patterns--转
- 【招聘(南京)】南京纳龙科技有限公司招高级.net开发工程师
- Trie树kmpAC自动机后缀数组Manacher
- linux中写脚本不能写中文,Linux系统中Sublime Text无法输入中文怎么办?
- shiro springboot 整合
- php条件运算符加法器,【加法笔记系列】JS 加法器模拟
- CCF CSP201909-2 小明种苹果(续)
- Durable NAND flash memory management
- 电子沙盘 数字沙盘 开发教程
- Excel Spearman相关系数
- linux中man命令的基本用法,linux中的man命令的详细解释
- Linux里解压zip报错和安装jdk遇到的问题,安装步骤
- 在阿里云买的域名,如何下载该域名下的域名证书?
- 中儒集团董事长朱宝先生一行到访亚信总部!
- 自学Java之day07_API的初识及使用
- 物联网智能家居项目总结(全)
- linux下无线网卡安装debian,Debian下安装无线网卡的驱动
- Go 整洁架构模版,建议收藏
- 复杂指令集和精简指令集
热门文章
- 4484: [Jsoi2015]最小表示(拓扑序+bitset维护连通性)
- [研一上]人脸属性迁移文献梳理(1)
- 热电阻温度计 电阻温度探测器 直接浸入式清洁传感器 精密RTD 美国Burns 胶囊式铂电阻温度检测器 迷你RTD整体热电偶套管 气温传感器 测温传感器 温度传感器 温度传感器生产厂家 温度变送器
- 静态分析之数据流分析与 SSA 入门 (二)
- 性能测试 性能测试实战(七)Jmeter分布式性能测试 influxDB Grafana Master Salve 主从配置 高并发性能测试 环境搭建 性能数据收集 性能数据可视化平台 搭建问题分析
- ueditor 前后端分离+图片上传
- Web与小程序AR技术原理
- 大流量下订单号生成方法
- ReadHub源码阅读笔记(二)dagger+MVP
- 服务器安装m.2固态硬盘,笔记本怎么安装M.2接口固态硬盘?笔记本M.2接口固态硬盘安装方法...