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


相关文章
|
7月前
|
存储 缓存 算法
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证
|
7月前
|
算法 计算机视觉 异构计算
基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
|
7月前
|
算法 计算机视觉 异构计算
基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
|
7月前
|
算法 异构计算
基于FPGA的图像高斯滤波实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像高斯滤波实现,包括tb测试文件和MATLAB辅助验证
|
7月前
|
算法 计算机视觉 异构计算
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
|
7月前
|
算法 计算机视觉 异构计算
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
|
7月前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
7月前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。

热门文章

最新文章

下一篇
DataWorks