FPGA设计——CMOS图像采集与以太网传输显示(OV7670)

简介:

1. 概述

本设计采用FPGA技术,将CMOS摄像头(DVP接口)的视频数据采集,并通过以太网传输(UDP方式)给PC机,上位机DEMO通过套接字编程,将视频实时显示在屏幕上。


2. 硬件系统框图

CMOS采用OV7670(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片。

wKiom1j6ALWy15JZAACOIDyEY3Q430.png

硬件平台采用ETree的FPGA开发板(某宝提供),如下图所示:

wKiom1nS5X-TdG6dAAEQAaXp264088.jpg-wh_50


3. UDP/IP协议

UDP(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高的场合。

UDP报文格式

0                     15

16             31

源端口号

目的端口号

报文长度

校验和

数据

IP(Internet Protoco)包位于网络层,功能是把分组发往目标网络或主机。所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。

wKiom1j6BCuw9vc-AAAf8zxxgKw091.png

以太网的数据帧的传输过程中,包长一般在46~1500字节,这里将UDP包长设计为:(8+20+640*2)=1308字节,以提高传输效率。


4. FPGA逻辑设计

FPGA各部分逻辑模块如下图所示:

wKiom1j6BtLTFz0cAAAfKTjIFvA112.png

  • 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)编程方式,软件工程师方便实现网络编程。

wKiom1j6CI-QgAKmAAEK5WxiUaI756.png


6. 视频显示结果

给FPGA板卡上电,打开UDP demo软件,视频正常显示。

wKiom1j7TgDh4NSAAAjVYJ87G-Y731.png


7. 任务管理器

在任务管理器中,可以查看网卡的状态,包括使用率和丢包的大概曲线图。UDP demo软件运行几分钟后,图像稳定显示,从任务管理器中可以看到本地网卡2的使用率为65.99%,曲线平整,没有异常丢包情况。

wKiom1j6CZei5WzzAACT6G8vWUU542.png


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


相关文章
|
3月前
|
存储 缓存 算法
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
|
4月前
|
算法 计算机视觉 异构计算
基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
|
4月前
|
算法 异构计算
基于FPGA的图像高斯滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像高斯滤波实现,包括tb测试文件和MATLAB辅助验证
|
5月前
|
算法 计算机视觉 异构计算
基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
|
5月前
|
算法 计算机视觉 异构计算
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
|
5月前
|
算法 计算机视觉 异构计算
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
|
11天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
2月前
|
编解码 算法 计算机视觉
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
|
3月前
|
算法 自动驾驶 计算机视觉
基于FPGA的图像Robert变换实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像Robert变换实现,包括tb测试文件和MATLAB辅助验证
|
3月前
|
算法 异构计算
基于FPGA的图像RGB转CIE-Lab实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像RGB转CIE-Lab实现,包含testbench和MATLAB辅助验证程序

热门文章

最新文章