博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FPGA设计——CMOS图像采集与以太网传输显示(OV7670)
阅读量:6248 次
发布时间:2019-06-22

本文共 5479 字,大约阅读时间需要 18 分钟。

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协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。

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的初始化配置代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//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%,曲线平整,没有异常丢包情况。

本文转自 shugenyin 51CTO博客,原文链接:http://blog.51cto.com/shugenyin/1918406

转载地址:http://wmlia.baihongyu.com/

你可能感兴趣的文章
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
oracle在线迁移同步数据,数据库报错
查看>>
linux性能剖析工具
查看>>
flutter中的异步
查看>>
计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第七周学习总结
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>
Oracle11G 卸载步骤
查看>>
Mars说光场(3)— 光场采集
查看>>
中小企业客户营收增长将成微博2016年主推动力
查看>>
第一个掘金文章
查看>>
我的友情链接
查看>>
微信Windows版无法备份聊天记录
查看>>