FPGA设计——CMOS图像采集与以太网传输显示(OV7670)
2017-04-22 09:45
363 查看
1. 概述
本设计采用FPGA技术,将CMOS摄像头(DVP接口)的视频数据采集,并通过以太网传输(UDP方式)给PC机,上位机DEMO通过套接字编程,将视频实时显示在屏幕上。
2. 硬件系统框图
CMOS采用OV7670(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片。
硬件平台采用ETree的FPGA开发板(某宝提供),如下图所示:
3. UDP/IP协议
UDP(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。
IP(Internet Protoco)包位于网络层,功能是把分组发往目标网络或主机。所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。
以太网的数据帧的传输过程中,包长一般在46~1500字节,这里将UDP包长设计为:(8+20+640*2)=1308字节,以提高传输效率。
4. FPGA逻辑设计
FPGA各部分逻辑模块如下图所示:
CMOS Capture,采集CMOS的DVP视频流;
I2C Config,配置CMOS芯片;
FIFO,实现CMOS时钟域到以太网时钟域之间的转换;
UDP Pack,实现UDP/IP协议的实现。
下面为OV7670的初始化配置代码:
5. 上位机Demo实现
本设计采用VC++ 2010设计了一款简易的UDP网络视频流播放器,视频源为RAW8格式,分辨率640*480,帧率25Hz。Windows为我们提供了便捷的套接字(socket)编程方式,软件工程师方便实现网络编程。
6. 视频显示结果给FPGA板卡上电,打开UDP demo软件,视频正常显示。
7. 任务管理器
在任务管理器中,可以查看网卡的状态,包括使用率和丢包的大概曲线图。UDP demo软件运行几分钟后,图像稳定显示,从任务管理器中可以看到本地网卡2的使用率为65.99%,曲线平整,没有异常丢包情况。
本设计采用FPGA技术,将CMOS摄像头(DVP接口)的视频数据采集,并通过以太网传输(UDP方式)给PC机,上位机DEMO通过套接字编程,将视频实时显示在屏幕上。
2. 硬件系统框图
CMOS采用OV7670(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片。
硬件平台采用ETree的FPGA开发板(某宝提供),如下图所示:
3. UDP/IP协议
UDP(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。
UDP报文格式 | |
0 15 | 16 31 |
源端口号 | 目的端口号 |
报文长度 | 校验和 |
数据 |
以太网的数据帧的传输过程中,包长一般在46~1500字节,这里将UDP包长设计为:(8+20+640*2)=1308字节,以提高传输效率。
4. FPGA逻辑设计
FPGA各部分逻辑模块如下图所示:
CMOS Capture,采集CMOS的DVP视频流;
I2C Config,配置CMOS芯片;
FIFO,实现CMOS时钟域到以太网时钟域之间的转换;
UDP Pack,实现UDP/IP协议的实现。
下面为OV7670的初始化配置代码:
//file name: i2c_cfg_par.v //creator: shugen.yin //date: 2017-4-21 //function: i2c registers //log: VGA RAW/25FPS, XCLK=24M module i2c_cfg_par( input [07:0] lut_index, output reg [15:0] lut_data ); always @(*) begin case(lut_index) //ov7670 RAW 25Fps 24M input 'd0 : lut_data <= 'h1280; 'd1 : lut_data <= 'h0000; 'd2 : lut_data <= 'h0000; 'd3 : lut_data <= 'h0000; 'd4 : lut_data <= 'h0000; 'd5 : lut_data <= 'h0000; 'd6 : lut_data <= 'h0000; 'd7 : lut_data <= 'h0000; 'd8 : lut_data <= 'h1101; 'd9 : lut_data <= 'h3a04; 'd10 : lut_data <= 'h1201; //windows setting 'd11 : lut_data <= 'h1712; //Hstart high 8bit 'd12 : lut_data <= 'h1800; //Hstop high 8bit 'd13 : lut_data <= 'h1902; //Vstart high 8bit 'd14 : lut_data <= 'h1a7a; //Vstop high 8bit 'd15 : lut_data <= 'h32b6; //HREF 'd16 : lut_data <= 'h0300; //VREF 'd17 : lut_data <= 'h0c00; 'd18 : lut_data <= 'h3e00; 'd19 : lut_data <= 'h703a; 'd20 : lut_data <= 'h7135; 'd21 : lut_data <= 'h7211; 'd22 : lut_data <= 'h73f0; 'd23 : lut_data <= 'ha202; 'd24 : lut_data <= 'h13e0; 'd25 : lut_data <= 'h0000; 'd26 : lut_data <= 'h0d40; 'd27 : lut_data <= 'h1438; 'd28 : lut_data <= 'ha507; 'd29 : lut_data <= 'hab08; 'd30 : lut_data <= 'h2495; 'd31 : lut_data <= 'h2533; 'd32 : lut_data <= 'h26e3; 'd33 : lut_data <= 'h9f78; 'd34 : lut_data <= 'ha068; 'd35 : lut_data <= 'ha10b; 'd36 : lut_data <= 'ha6d8; 'd37 : lut_data <= 'ha7d8; 'd38 : lut_data <= 'ha8f0; 'd39 : lut_data <= 'ha990; 'd40 : lut_data <= 'haa94; 'd41 : lut_data <= 'h13e5; 'd42 : lut_data <= 'h0e61; 'd43 : lut_data <= 'h0f4b; 'd44 : lut_data <= 'h1602; 'd45 : lut_data <= 'h2102; 'd46 : lut_data <= 'h2291; 'd47 : lut_data <= 'h2907; 'd48 : lut_data <= 'h3303; 'd49 : lut_data <= 'h350b; 'd50 : lut_data <= 'h371c; 'd51 : lut_data <= 'h3871; 'd52 : lut_data <= 'h3c78; 'd53 : lut_data <= 'h3d08; 'd54 : lut_data <= 'h413a; 'd55 : lut_data <= 'h4d40; 'd56 : lut_data <= 'h4e20; 'd57 : lut_data <= 'h6955; 'd58 : lut_data <= 'h6b4a; 'd59 : lut_data <= 'h7419; 'd60 : lut_data <= 'h7661; 'd61 : lut_data <= 'h8d4f; 'd62 : lut_data <= 'h8e00; 'd63 : lut_data <= 'h8f00; 'd64 : lut_data <= 'h9000; 'd65 : lut_data <= 'h9100; 'd66 : lut_data <= 'h9600; 'd67 : lut_data <= 'h9a80; 'd68 : lut_data <= 'hb08c; 'd69 : lut_data <= 'hb10c; 'd70 : lut_data <= 'hb20e; 'd71 : lut_data <= 'hb382; 'd72 : lut_data <= 'hb80a; 'd73 : lut_data <= 'h4314; 'd74 : lut_data <= 'h44f0; 'd75 : lut_data <= 'h4534; 'd76 : lut_data <= 'h4658; 'd77 : lut_data <= 'h4728; 'd78 : lut_data <= 'h483a; 'd79 : lut_data <= 'h5988; 'd80 : lut_data <= 'h5a88; 'd81 : lut_data <= 'h5b44; 'd82 : lut_data <= 'h5c67; 'd83 : lut_data <= 'h5d49; 'd84 : lut_data <= 'h5e0e; 'd85 : lut_data <= 'h6c0a; 'd86 : lut_data <= 'h6d55; 'd87 : lut_data <= 'h6e11; 'd88 : lut_data <= 'h6f9f; 'd89 : lut_data <= 'h6a40; 'd90 : lut_data <= 'h0140; 'd91 : lut_data <= 'h0240; 'd92 : lut_data <= 'h13e7; 'd93 : lut_data <= 'h3411; 'd94 : lut_data <= 'h9266; 'd95 : lut_data <= 'h3b0a; 'd96 : lut_data <= 'ha488; 'd97 : lut_data <= 'h9600; 'd98 : lut_data <= 'h9730; 'd99 : lut_data <= 'h9820; 'd100 : lut_data <= 'h9920; 'd101 : lut_data <= 'h9a84; 'd102 : lut_data <= 'h9b29; 'd103 : lut_data <= 'h9c03; 'd104 : lut_data <= 'h9d4c; 'd105 : lut_data <= 'h9e3f; 'd106 : lut_data <= 'h7804; 'd107 : lut_data <= 'h7901; 'd108 : lut_data <= 'hc8f0; 'd109 : lut_data <= 'h790f; 'd110 : lut_data <= 'hc820; 'd111 : lut_data <= 'h7910; 'd112 : lut_data <= 'hc87e; 'd113 : lut_data <= 'h790b; 'd114 : lut_data <= 'hc801; 'd115 : lut_data <= 'h790c; 'd116 : lut_data <= 'hc807; 'd117 : lut_data <= 'h790d; 'd118 : lut_data <= 'hc820; 'd119 : lut_data <= 'h7902; 'd120 : lut_data <= 'hc8c0; 'd121 : lut_data <= 'h7903; 'd122 : lut_data <= 'hc840; 'd123 : lut_data <= 'h7905; 'd124 : lut_data <= 'hc830; 'd125 : lut_data <= 'h7926; default : lut_data <= 'h0000; endcase end endmodule
5. 上位机Demo实现
本设计采用VC++ 2010设计了一款简易的UDP网络视频流播放器,视频源为RAW8格式,分辨率640*480,帧率25Hz。Windows为我们提供了便捷的套接字(socket)编程方式,软件工程师方便实现网络编程。
6. 视频显示结果给FPGA板卡上电,打开UDP demo软件,视频正常显示。
7. 任务管理器
在任务管理器中,可以查看网卡的状态,包括使用率和丢包的大概曲线图。UDP demo软件运行几分钟后,图像稳定显示,从任务管理器中可以看到本地网卡2的使用率为65.99%,曲线平整,没有异常丢包情况。
相关文章推荐
- FPGA设计——全局曝光CMOS图像采集与USB2.0显示
- FPGA设计——CMOS图像采集与以太网传输显示(MT9V011)
- FPGA综合系统设计(二):基于FPGA的温度采集和以太网传输
- FPGA设计——CMOS摄像与HDMI显示(DVP版)
- 利用FPGA和USB总线的视频图像的采集与处理系统设计
- 基于FPGA的LCD+CMOS视频采集显示使用小结
- OV7670摄像采集图像在VGA上显示的分析和实现,精确到每个时钟,每行代码。
- FPGA学习心得——LCD1602文字滚动显示(4位传输模式、ST7066U控制芯片)
- 基于FPGA的以太网MII接口扩展设计与实现
- 基于FPGA的以太网MAC子层协议设计实现
- Window XP驱动开发(十一) USB2.0 芯片CY7C68013A+FPGA实现的高速传输系统设计(软件及硬件)
- 基于嵌入式Linux的视频图像采集与传输
- 基于嵌入式Linux的视频图像采集与传输
- 基于OV6630图像传感器和DSP的图像采集系统设计
- 基于BF533 的 图像采集与显示
- FPGA数据传输模块设计
- 基于VB的单片机温度数据采集与传输系统设计 下位机程序
- 基于TMS320F2812的视频图像采集系统的设计
- 基于VB的单片机温度数据采集与传输系统设计
- 一个很好用的图形显示控件(可以用于实时采集的图像显示)