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 进行上电操作时,需要 ...
随机推荐
- Spring入门之AOP实践:@Aspect + @Pointcut + @Before / @Around / @After
零.准备知识 1)AOP相关概念:Aspect.Advice.Join point.Pointcut.Weaving.Target等. ref: https://www.cnblogs.com/zha ...
- java中的char
System.out.println("char二进制位数:" + Character.SIZE);//16 即2个字节 在c语言中,char类型占一个字节,而汉子占两个字节,所以 ...
- BZOJ 2535: [Noi2010]Plane 航空管制2
Description 世博期间,上海的航空客运量大大超过了平时,随之而来的航空管制也频频发生.最近,小X就因为航空管制,连续两次在机场被延误超过了两小时.对此,小X表示很不满意. 在这次来烟台的路上 ...
- requests模块(post)请求篇
'''利用parse模块模拟post请求分析百度词典分析步骤:1. 打开F122. 尝试输入单词girl,发现每敲一个字母后都有请求3. 请求地址是 http://fanyi.baidu.com/su ...
- 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考)
本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclip ...
- 古剑奇谭三已取消该页导航,B站版本无法登陆
最近登陆古剑三突然出现这个问题 怎么重开也无法登陆 最后发现是Ie设置问题 解决方法 点中间这个圆形图标打开 小娜 搜索“ie” 点击打开ie之后点右上角的小齿轮 选择“internet选项” 连接- ...
- 零基础:如何快速学习JavaScript,html+css技术
前端开发要学的知识内容涉及的会很宽泛,虽然说主要是HTML.CSS和JavaScript这些基础知识点,但达妹今天想强调一下,学前端开发除了要学这些基础知识外,学员还要在这之上进行延伸和深入的去学,而 ...
- Python之类的特殊成员方法
类的特殊成员方法 1.__doc__ :打印类的描述信息 class Foo: """ 描述类信息,这是用于看片的神奇 """ def fu ...
- 为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?
之前在阅读<阿里巴巴Java开发手册>时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符 ...
- c++11::std::optional
std::optional还有一个类似于智能指针的接口, 它可以显式转化为bool来表示std::optional是否有一个值. 指针的解引用操作符*和->都实现了, 但是没有std::bad_ ...