您好,登錄后才能下訂單哦!
1. 概述
本設(shè)計(jì)采用FPGA技術(shù),將CMOS攝像頭(DVP接口)的視頻數(shù)據(jù)采集,并通過(guò)以太網(wǎng)傳輸(UDP方式)給PC機(jī),上位機(jī)DEMO通過(guò)套接字編程,將視頻實(shí)時(shí)顯示在屏幕上。
2. 硬件系統(tǒng)框圖
CMOS采用OV7670(30萬(wàn)像素),F(xiàn)PGA采用ALTERA公司的CYCLONE IV,以太網(wǎng)卡采用IC plus公司的100M網(wǎng)卡芯片。
硬件平臺(tái)采用ETree的FPGA開發(fā)板(某寶提供),如下圖所示:
3. UDP/IP協(xié)議
UDP(User Datagram Protocol)是OSI參考模型中一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。每一個(gè)數(shù)據(jù)包的前8個(gè)字節(jié)用來(lái)包含報(bào)頭信息,剩余字節(jié)則用來(lái)包含具體的傳輸數(shù)據(jù)。UDP協(xié)議經(jīng)常用于圖像傳輸、網(wǎng)絡(luò)監(jiān)控?cái)?shù)據(jù)交換等數(shù)據(jù)傳輸速度要求比較高的場(chǎng)合。
UDP報(bào)文格式 | |
0???????????????????? 15 | 16 ? ? ? ? ? ? 31 |
源端口號(hào) | 目的端口號(hào) |
報(bào)文長(zhǎng)度 | 校驗(yàn)和 |
數(shù)據(jù) |
IP(Internet Protoco)包位于網(wǎng)絡(luò)層,功能是把分組發(fā)往目標(biāo)網(wǎng)絡(luò)或主機(jī)。所有的TCP,UDP,IMCP,IGCP的數(shù)據(jù)都以IP數(shù)據(jù)格式傳輸。
以太網(wǎng)的數(shù)據(jù)幀的傳輸過(guò)程中,包長(zhǎng)一般在46~1500字節(jié),這里將UDP包長(zhǎng)設(shè)計(jì)為:(8+20+640*2)=1308字節(jié),以提高傳輸效率。
4. FPGA邏輯設(shè)計(jì)
FPGA各部分邏輯模塊如下圖所示:
CMOS Capture,采集CMOS的DVP視頻流;
I2C Config,配置CMOS芯片;
FIFO,實(shí)現(xiàn)CMOS時(shí)鐘域到以太網(wǎng)時(shí)鐘域之間的轉(zhuǎn)換;
UDP Pack,實(shí)現(xiàn)UDP/IP協(xié)議的實(shí)現(xiàn)。
下面為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?<=??'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; endcase end endmodule
5. 上位機(jī)Demo實(shí)現(xiàn)
本設(shè)計(jì)采用VC++ 2010設(shè)計(jì)了一款簡(jiǎn)易的UDP網(wǎng)絡(luò)視頻流播放器,視頻源為RAW8格式,分辨率640*480,幀率25Hz。Windows為我們提供了便捷的套接字(socket)編程方式,軟件工程師方便實(shí)現(xiàn)網(wǎng)絡(luò)編程。
6. 視頻顯示結(jié)果
給FPGA板卡上電,打開UDP demo軟件,視頻正常顯示。
7. 任務(wù)管理器
在任務(wù)管理器中,可以查看網(wǎng)卡的狀態(tài),包括使用率和丟包的大概曲線圖。UDP demo軟件運(yùn)行幾分鐘后,圖像穩(wěn)定顯示,從任務(wù)管理器中可以看到本地網(wǎng)卡2的使用率為65.99%,曲線平整,沒(méi)有異常丟包情況。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。