OV5640摄像头的数据处理配置流程(一)
module RGB_init(
//系统信号输入(时钟+复位)
input cmos_clk_i, //模块控制时钟
input rst_n_i, //系统复位信号
//OV5640输出信号(从5640输入到FPGA)
input cmos_pclk_i, //摄像头时钟
input cmos_href_i, //帧输出行同步信号
input cmos_vsync_i, //场同步信号
input [:] cmos_data_i, //像素数据
//模块的输出信号
output clk_ce, //摄像头帧数据输出/捕获使能信号(12Mhz),该信号的理解是最难的
output de_o, //数据有效信号
output [:] rgb_o, //输出的24bit像素数据
output vs_o, //输出的场同步信号
output hs_o, //输出的行同步信号
//输出道5640模块的像素时钟
output cmos_xclk
); //为了保持系统稳定,需要丢弃前期一部分帧图像,此处选择丢弃15个,自行选择,也有10个的
parameter[:]CMOS_FRAME_WAITCNT=; assign cmos_xclk=cmos_clk_i; //xclk为5640驱动时钟,为24/25Mhz //在米联客的对复位信号的处理中,复位信号延迟了5个时钟,好像不延迟也可以,可以在例程2中查看
//个人认为复位信号的处理是为了使复位信号保持一个完整的信号周期
reg[:]rst_n_reg='d0;
always@(posedge cmos_clk_i) //同步于FPGA输入时钟
begin
rst_n_reg<={rst_n_reg[:],rst_n_i};
end reg cmos_href_r='b0; //将行同步信号进行缓存
reg [:]cmos_vsync_r; //将场同步信号进行缓存
reg[:]cmos_data_r; //将5640输出到FPGA的数据进行寄存,因为是处理输出16bit,就是将两个周期的输入信号进行拼接处理
//进行行、场同步信号进行缓存,输入数据进行一级缓存
always@(posedge cmos_pclk_i)
begin
cmos_vsync_r<=cmos_vsync_i;
cmos_href_r<=cmos_href_i;
cmos_data_r<=cmos_data_i;
end //为了判断一帧数据的开始&结束,同时对帧进行计数,对场同步信号进行寄存
reg [:]cmos_vsync_d;
always@(posedge cmos_pclk_i) //同步于5640输出时钟
begin
cmos_vsync_d<={cmos_vsync_d[],cmos_vsync_r};
end
//场开始与结束信号
wire vs_start;
assign vs_start=(!cmos_vsync_d[])&(cmos_vsync_d[]); //posedge mark the action
wire vs_end;
assign vs_end=(cmos_vsync_d[])&(!cmos_vsync_d[]); //行同步信号缓存
reg [:]cmos_href_d='d0;
always@(posedge cmos_pclk_i)
begin
cmos_href_d<={cmos_href_d[],cmos_href_r};
end //前期丢弃部分帧
reg [:]frame_cnt=; //帧计数器
reg out_en=; //开始正常启动操作
always@(posedge cmos_pclk_i)
if(!rst_n_reg[])
begin
frame_cnt<='d0;
out_en<='b0;
end
else begin
if(vs_start) begin
frame_cnt<=frame_cnt+;
out_en<=;
end
else if(frame_cnt>=CMOS_FRAME_WAITCNT)
begin
out_en<=;
frame_cnt<=CMOS_FRAME_WAITCNT; //保持正常帧处理完毕
end
end
//由于输出的是24bit数据,是由16bit数据转化而来,将两个帧的RGB数据进行拼接
reg href_cnt=;
reg data_en='b0;
reg [:]RGBm='d0; //middle RGB data always@(posedge cmos_pclk_i)begin
if(!rst_n_reg[])begin
href_cnt<=;
data_en<='b0;
RGBm<='d0;
end
//两个数据拼接完毕之后将data_en置一,第0次拼接使低8位有效,第1次使得低八位有效(位移)
else begin
href_cnt<=(cmos_href_r)?href_cnt+'b1:href_cnt;
data_en<=(href_cnt==);
if(href_cnt) RGBm<={RGBm[:],cmos_data_r}; //此处cmos_data_r lag 2 clocks,thus later all lag 2clks
end
end assign rgb_o={RGBm[:],'d0,RGBm[10:5],2'd0,RGBm[:],'d0};
//模块行同步输出
assign hs_o=out_en?(cmos_href_d[]):; //为了与暑促信号同步,该同步信号是滞后两个pclk
//模块场同步信号输出
assign vs_o=out_en?(cmos_vsync_r):; //行同步结束之后开始场同步,场同步信号知乎一个pclk,觉得这个程序真的很nb,考虑的太全了
//模块数据输出同步时钟信号,12M,
assign de_o=out_en?data_en:;
//输出时钟enable signal
assign clk_ce=out_en?((data_en&hs_o)||!hs_o):; //其实好像1也行,没有边沿驱动
//在init complete的情况下,d0是经过了2个pclk延迟的,该output信号同步(更准确地说是对齐)于这个数据输入时的时钟,
//同步于12Mhz的data_en时钟
//该模块每2个pclk输出一次rgb[23:0]的数据,需要听过clk_ce对时钟频率进行同步,该处理解决了模块接口之间的同步问题
/*
举例说明:
在do==0时,clk_ce恒为高,没有时钟脉冲
在do==1时,该时钟始终同步于12M时钟
*/
endmodule
OV5640摄像头的数据处理配置流程(一)的更多相关文章
- FPGA配置OV5640摄像头及RGB图像数据采集
本文设计思想采用明德扬至简设计法.在做摄像头数据采集处理之前,需要配置OV5640传感器内部寄存器使其按要求正常工作,详细内容请参见<OV5640自动对焦照相模组应用指南>.首先要关注OV ...
- OV5640摄像头配置一些值得注意的关键点(三)
一.字节标志的注意点 由于摄像头的输出是RGB56格式,所以需要将两帧的数据进行拼接,之后送到上位机进行显示. reg byte_flag; always@(posedge cmos_pclk_i) ...
- 第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列
第46章 DCMI—OV5640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...
- ov5640摄像头设备驱动
http://www.cnblogs.com/firege/p/5806121.html (驱动大神) http://blog.csdn.net/yanbixing123/article/detai ...
- 利用AXI VDMA实现OV5640摄像头采集
利用AXI VDMA实现OV5640摄像头采集 导读:摄像头采样图像数据后经过VDMA进入DDR,通过PS部分控制,经过三级缓存,将DDR中保持的图形数据通过VDMA发送出去.在FPGA的接收端口产生 ...
- QT特供 CGAL配置流程(基于QT5+VS2015)
最近做的QT项目涉及计算几何库,需要用到CGAL,其配置着实麻烦,而且相互关联的软件也存在版本兼容一类的问题,在这里就对其配置流程做一些整理说明,以便后来者能够少些烦恼.(注:以下使用Win10作说明 ...
- 转载-Linux下svn搭建配置流程
Linux下svn搭建配置流程 一. 源文件编译安装.源文件共两个,为: 1. 下载subversion源文件 subversion-1.6.1.tar.gz http://d136 ...
- win10下vagrant+centos7 rails虚拟开发机配置流程
此文写于2017.8.21 在写本文前,笔者已经尝试了多种其他的替代方法,例如wmware虚拟机安装kylin.然而发现总是还有各种问题.经大佬指点安装了virtualbox + vagrant.于是 ...
- HI3531的DDR3配置流程
DDR3 初始化配置流程 系统上电之后,必须先完成DDR3 SDRAM 的初始化操作,系统才能访问DDR3 SDRAM.在进行初始化之前需要注意以下几点: 对DDR3 SDRAM 进行上电操作时,需要 ...
随机推荐
- MongoDB 学习笔记之 Aggregation Pipeline实战实现inner join
Aggregation Pipeline实战实现inner join: leftT集合: comments集合: 现在我们要用aggregation实现inner join db.comments. ...
- web前端之面试:自我介绍
面试官您好, 首先很感谢贵公司的面试邀请, 让我有这个幸运机会能来到这里和您交流 : 接下来我做一个简单的自我介绍: 我的姓名是 XX, 祖籍是XX, 年龄是24, 学校是 XXX, 专业是XXX: ...
- mfc CString 转 char *
做界面时遇到需要从界面编辑框接受输入字符(用户名,密码之类),然后转为char *类型交给程序处理,记录一下找到的方法,主要参考https://blog.csdn.net/neverup_/artic ...
- django-rest-framework解析请求参数
django-rest-framework解析请求参数 前言 前面的文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式 ...
- SpringCloud教程一:eureka注册中心(Finchley版)
一.spring cloud简介 本阶段学习教程Spring Boot版本2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE. Finchley版本的官方文档如 ...
- Spring基础(二)
一.使用注解配置Spring 1.1步骤 --配置文件中,指明注解位置 --要用的地方打上注解 --改对象的作用范围(修改掉默认的单例,变多例) --属性的注入(两种) 使用的反射实现 set方法实现 ...
- BBEdit 13.0 for Mac 打开大文件不吃力
BBEdit 是一款拥有 16 年历史的 HTML 和文本编辑器,拥有高性能且流畅的文本处理能力,适用于 Web 和软件开发者,具备功能丰富且强大的智能搜索.代码折叠.FTP 和 SFTP 管理等功能 ...
- [NOIp2009] luogu P1072 Hankson 的趣味题
把 c 改成 d 下了两个点. 题目描述 已知正整数 a0,a1,b0,b1a_0,a_1,b_0,b_1a0,a1,b0,b1,设某未知正整数 xxx 满足: xxx 和 a0a_0a0 ...
- 素数与Miller-Rabin测试
素数及其性质 素数又称质数.指整数在一个大于 111 的自然数中,除了 111 和此整数自身外,没法被其他自然数整除的数. 性质1 有无穷多个素数. 证明: 用反证法.设已知的最大素数为 PPP,考虑 ...
- [LUOGU1868] 饥饿的奶牛 - dp二分
题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你可以选择任意区间但不能有 ...