您好,登錄后才能下訂單哦!
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=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. 上位機Demo實現
本設計采用VC++ 2010設計了一款簡易的UDP網絡視頻流播放器,視頻源為RAW8格式,分辨率640*480,幀率25Hz。Windows為我們提供了便捷的套接字(socket)編程方式,軟件工程師方便實現網絡編程。
6. 視頻顯示結果
給FPGA板卡上電,打開UDP demo軟件,視頻正常顯示。
7. 任務管理器
在任務管理器中,可以查看網卡的狀態,包括使用率和丟包的大概曲線圖。UDP demo軟件運行幾分鐘后,圖像穩定顯示,從任務管理器中可以看到本地網卡2的使用率為65.99%,曲線平整,沒有異常丟包情況。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。