FPGA设计——CMOS图像采集与以太网传输显示(OV7670)
1. 概述
本设计采用FPGA技术,将CMOS摄像头(DVP接口)的视频数据采集,并通过以太网传输(UDP方式)给PC机,上位机DEMO通过套接字编程,将视频实时显示在屏幕上。
2. 硬件系统框图
CMOS采用OV7670(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用IC plus公司的100M网卡芯片。
硬件平台采用ETree的FPGA开发板(某宝提供),如下图所示:
3. UDP/IP协议
UDP(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。
UDP报文格式
0 15
16 31
源端口号
目的端口号
报文长度
校验和
数据
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的初始化配置代码:
//file name:i2c_cfg_par.v//creator:shugen.yin//date:2017-4-21//function:i2c registers//log:VGA RAW/25FPS, XCLK=24Mmodule i2c_cfg_par(input [07:0] lut_index,output reg [15:0] lut_data);always @(*)begincase(lut_index)//ov7670 RAW 25Fps 24M input'd0:lut_data <= 'h2280;'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 <= 'h2101;'d9:lut_data <= 'h4a04;'d10:lut_data <= 'h2201;//windows setting'd11:lut_data <= 'h2712;//Hstart high 8bit'd12:lut_data <= 'h2800;//Hstop high 8bit'd13:lut_data <= 'h2902;//Vstart high 8bit'd14:lut_data <= 'h2a7a;//Vstop high 8bit'd15:lut_data <= 'h42b6;//HREF'd16:lut_data <= 'h0300;//VREF'd17:lut_data <= 'h0c00;'d18:lut_data <= 'h4e00;'d19:lut_data <= 'h703a;'d20:lut_data <= 'h7135;'d21:lut_data <= 'h7211;'d22:lut_data <= 'h73f0;'d23:lut_data <= 'ha202;'d24:lut_data <= 'h23e0;'d25:lut_data <= 'h0000;'d26:lut_data <= 'h0d40;'d27:lut_data <= 'h2438;'d28:lut_data <= 'ha507;'d29:lut_data <= 'hab08;'d30:lut_data <= 'h3495;'d31:lut_data <= 'h3533;'d32:lut_data <= 'h36e3;'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 <= 'h23e5;'d42:lut_data <= 'h0e61;'d43:lut_data <= 'h0f4b;'d44:lut_data <= 'h2602;'d45:lut_data <= 'h3102;'d46:lut_data <= 'h3291;'d47:lut_data <= 'h3907;'d48:lut_data <= 'h4303;'d49:lut_data <= 'h450b;'d50:lut_data <= 'h471c;'d51:lut_data <= 'h4871;'d52:lut_data <= 'h4c78;'d53:lut_data <= 'h4d08;'d54:lut_data <= 'h513a;'d55:lut_data <= 'h5d40;'d56:lut_data <= 'h5e20;'d57:lut_data <= 'h7955;'d58:lut_data <= 'h7b4a;'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 <= 'h5314;'d74:lut_data <= 'h54f0;'d75:lut_data <= 'h5534;'d76:lut_data <= 'h5658;'d77:lut_data <= 'h5728;'d78:lut_data <= 'h583a;'d79:lut_data <= 'h6988;'d80:lut_data <= 'h6a88;'d81:lut_data <= 'h6b44;'d82:lut_data <= 'h6c67;'d83:lut_data <= 'h6d49;'d84:lut_data <= 'h6e0e;'d85:lut_data <= 'h7c0a;'d86:lut_data <= 'h7d55;'d87:lut_data <= 'h7e11;'d88:lut_data <= 'h7f9f;'d89:lut_data <= 'h7a40;'d90:lut_data <= 'h0140;'d91:lut_data <= 'h0240;'d92:lut_data <= 'h23e7;'d93:lut_data <= 'h4411;'d94:lut_data <= 'h9266;'d95:lut_data <= 'h4b0a;'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;endcaseendendmodule
5. 上位机Demo实现
本设计采用VC++ 2010设计了一款简易的UDP网络视频流播放器,视频源为RAW8格式,分辨率640*480,帧率25Hz。Windows为我们提供了便捷的套接字(socket)编程方式,软件工程师方便实现网络编程。
6. 视频显示结果
给FPGA板卡上电,打开UDP demo软件,视频正常显示。
7. 任务管理器
在任务管理器中,可以查看网卡的状态,包括使用率和丢包的大概曲线图。UDP demo软件运行几分钟后,图像稳定显示,从任务管理器中可以看到本地网卡2的使用率为65.99%,曲线平整,没有异常丢包情况。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。