馮云婷,張 軍,毛紫荊
(天津職業(yè)技術(shù)師范大學(xué)電子工程學(xué)院,天津300222)
近年來,大部分電子設(shè)備都產(chǎn)生接入互聯(lián)網(wǎng)的需求,視頻的實時傳輸也需要向智能、網(wǎng)絡(luò)方向發(fā)展。傳統(tǒng)的視頻傳輸通過電纜進(jìn)行傳輸,缺點是只適合于區(qū)域傳輸[1]。由于以太網(wǎng)具有成本低、易與網(wǎng)絡(luò)連接以及通信速率高等優(yōu)點,因此可應(yīng)用在網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控等對視頻實時性要求較高的場景?,F(xiàn)場可編程門陣列(field programmable gate array,F(xiàn)PGA)具有靈活性強(qiáng)、吞吐量和集成度高等優(yōu)點,且可編程邏輯資源豐富[2],能進(jìn)行快速的并行運(yùn)算,重復(fù)編程,性價比高,因此應(yīng)用于數(shù)字信號處理、視頻圖像處理以及人工智能等領(lǐng)域。高俊嶺等[3]使用OV7670攝像頭采集圖像,通過VGA(video graphics array)進(jìn)行實時顯示,實現(xiàn)了視頻圖像的采集顯示,但并未使用乒乓操作和利用網(wǎng)線進(jìn)行數(shù)據(jù)傳輸,因此不能進(jìn)行遠(yuǎn)距離傳輸。韓眾等[4]使用CMOS攝像頭獲取圖像,采用乒乓式存儲,實現(xiàn)數(shù)據(jù)的SDRAM(synchronous dynamic random access memory)存儲和VGA顯示,解決了圖像拖影問題,但還是不能解決遠(yuǎn)距離傳輸視頻圖像的問題。吳長瑞等[5]將FPGA和PHY芯片結(jié)合,實現(xiàn)了UDP/IP(user datagram protocol/internet protocol)協(xié)議數(shù)據(jù)的正確發(fā)送和接收,但未實現(xiàn)視頻圖像的以太網(wǎng)傳輸。于波等[1]基于EP4CE10F17C8使用OV7725實現(xiàn)了以太網(wǎng)視頻傳輸,實驗工程未使用乒乓存儲,且進(jìn)行通信時采用的是MII接口,需要16根通信線,端口使用信號線過多。本文在SDRAM數(shù)字讀寫控制模塊中使用乒乓操作,對OV7725攝像頭采集的數(shù)據(jù)進(jìn)行SDRAM輸入輸出,無縫緩沖,節(jié)約了緩存空間,采用RMII接口進(jìn)行以太網(wǎng)模塊的設(shè)計,只需7根通信線即可完成視頻的實時傳輸。
視頻實時傳輸過程分為視頻數(shù)據(jù)獲取、存儲和傳輸。首先光線通過鏡頭傳輸?shù)綀D像傳感器,感光矩陣將光信號轉(zhuǎn)變成電信號,再將信號存儲為由像素點組成的數(shù)字圖像,再經(jīng)過A/D轉(zhuǎn)換,傳入DSP處理單元進(jìn)行圖像處理,包含圖像格式轉(zhuǎn)換等處理操作。轉(zhuǎn)換成10 bit的數(shù)據(jù)流后,一般使用8根數(shù)據(jù)線將數(shù)據(jù)傳輸至FPGA芯片,再存儲至SDRAM,最后通過網(wǎng)線傳輸視頻信號。視頻實時傳輸?shù)募夹g(shù)指標(biāo)有吞吐量、丟包率、接收幀率和傳輸速率。吞吐量為單位時間內(nèi)傳輸?shù)臄?shù)據(jù)量,丟包率為丟失的數(shù)據(jù)包數(shù)量占發(fā)送數(shù)據(jù)的比率,接收幀率為每秒接收的圖像幀數(shù)。其中,吞吐量、接收幀率和速率與圖像清晰流暢成正比,丟包率與其成反比。對于幀率,當(dāng)幀率高于10~12 fps時,人眼認(rèn)為圖像連貫。
實驗工程主要實現(xiàn)對攝像頭的配置、圖像數(shù)據(jù)的處理及緩存、圖像數(shù)據(jù)以及視頻在上位機(jī)進(jìn)行實時顯示的功能。在系統(tǒng)實現(xiàn)中,采用Quartus II 13.0為開發(fā)環(huán)境,整體采用Verilog HDL語言實現(xiàn)各個模塊的功能描述,并使用ModelSim軟件進(jìn)行聯(lián)合仿真以及SignalTapⅡ工具對信號進(jìn)行實時抓取,分析各個模塊波形,驗證其設(shè)計正確性。其中,采用的主控芯片為Altera Cyclone IV E系列的FPGA[6],型號為EP4CE10F 17C8,OV7725攝像頭傳感器作為采集前端,SDRAM作為數(shù)據(jù)緩存,最后通過PHY芯片與MAC層通信,進(jìn)行數(shù)據(jù)輸出。
系統(tǒng)的整體框架如圖1所示,功能主要包括圖像數(shù)據(jù)的接收、緩存及傳輸三方面[7],具體為時鐘管理模塊、攝像頭驅(qū)動模塊、SDRAM數(shù)據(jù)讀寫控制模塊以及以太網(wǎng)數(shù)據(jù)通信模塊。
圖1 整體功能框圖
攝像頭驅(qū)動模塊包括I2C驅(qū)動模塊、寄存器配置模塊以及圖像采集模塊;以太網(wǎng)數(shù)據(jù)通信模塊包括UDP模塊和數(shù)據(jù)封裝模塊。
①由IP核PLL生成I2C(inter-integrated circuit)驅(qū)動模塊和SDRAM控制模塊的驅(qū)動時鐘,OV7725圖像采集模塊時鐘由攝像頭自帶晶振產(chǎn)生并傳入,UDP模塊、圖像格式配置模塊和數(shù)據(jù)打包模塊的驅(qū)動時鐘都由外部PHY(physical)芯片傳入。②由I2C驅(qū)動模塊向OV7725攝像頭寫入寄存器配置信息,OV7725采集模塊將傳入的圖像數(shù)據(jù)采用乒乓操作的方式暫存至SDRAM。③圖像格式配置模塊按照上位機(jī)顯示的格式進(jìn)行配置,圖像數(shù)據(jù)打包模塊再讀取并打包SDRAM中的數(shù)據(jù)。④UDP模塊通過網(wǎng)線將數(shù)據(jù)發(fā)送至上位機(jī),實現(xiàn)視頻圖像的實時顯示。
攝像頭采集模塊采用OV7725圖像傳感器采集視頻數(shù)據(jù)[1],其在性能、質(zhì)量及可靠性等方面滿足了大部分的多媒體要求,在弱光條件下表現(xiàn)出色,且可在-20~70℃的溫度范圍內(nèi)工作,支持輸出最大為30萬像素(640×480分辨率)的圖像,能夠在VGA模式下以60幀/s的速度運(yùn)行[8],由用戶控制輸出圖像的格式以及數(shù)據(jù)傳輸?shù)取F渲?,攝像頭控制寄存器的參數(shù)由I2C控制模塊通過時鐘信號SCL和數(shù)據(jù)信號SDA[9]引腳寫入,攝像頭根據(jù)寄存器的參數(shù)配置運(yùn)行。SCL和SDA使用的通訊協(xié)議SCCB和I2C類似,故可使用I2C協(xié)議代替。
該攝像頭通過2×10排針與FPGA開發(fā)板相連,I2C驅(qū)動模塊的功能是實現(xiàn)OV7725攝像頭的初始化和寄存器配置。首先,使用I2C協(xié)議代替SCCB接口協(xié)議向OV7725攝像頭寫入OV7725寄存器模塊內(nèi)部包含的寄存器配置信息,繼而對攝像頭進(jìn)行相關(guān)配置。OV7725圖像采集模塊再接收攝像頭傳輸?shù)臄?shù)據(jù)信息,并將8 bit的圖像數(shù)據(jù)拼接成16 bit數(shù)據(jù),暫存至SDRAM中。圖2為由ModelSim仿真軟件得到的圖像采集模塊仿真圖,可見該模塊能正確地采集數(shù)據(jù)。
圖2 圖像采集模塊ModelSim仿真圖
SDRAM即同步動態(tài)隨機(jī)存儲器,通過對電容不斷地充放電來保持?jǐn)?shù)據(jù),而且數(shù)據(jù)的讀寫可以隨機(jī)指定地址[9]。使用的SDRAM型號為W9825G6KH,存儲容量為256 Mbit,內(nèi)部含有4個L-Bank,地址位寬13位,數(shù)據(jù)位寬16位。在存儲陣列中,一個陣列為一個L-Bank,確定數(shù)據(jù)的存儲地址,需要先確定L-Bank地址,再確定行地址和列地址(先行后列),進(jìn)而定位到存儲單元,再實現(xiàn)某一存儲單元數(shù)據(jù)的讀寫操作。
由于攝像頭傳感器的傳輸格式是640×480@60 Hz,因此每秒輸出的數(shù)據(jù)量為281.25 Mbit(640×480×60×16 bit),大于百兆以太網(wǎng)的最大傳輸帶寬(100 Mbit/s),所以需要SDRAM模塊暫存攝像頭采集到的圖像數(shù)據(jù)。SDRAM讀寫控制模塊包括SDRAM控制模塊和FIFO(first in first out)控制模塊。PLL鎖相環(huán)為該模塊提供125 MHz和125 MHz相位偏移的驅(qū)動時鐘。其中,SDRAM控制模塊的初始化、自動刷新、數(shù)據(jù)寫、數(shù)據(jù)讀以及仲裁操作,保證了數(shù)據(jù)的正確讀寫。FIFO控制模塊包括讀、寫FIFO,常用于高速異步時鐘之間的數(shù)據(jù)傳輸[10]。當(dāng)OV7725模塊輸出的寫能使信號有效時,在OV7725_pclk時鐘下,將采集到的圖像數(shù)據(jù)寫入到FIFO控制模塊的寫FIFO中,當(dāng)數(shù)據(jù)量達(dá)到寫突發(fā)長度時,SDRAM控制模塊將數(shù)據(jù)寫入SDRAM中。當(dāng)圖像數(shù)據(jù)打包模塊的讀數(shù)據(jù)請求信號有效時,在外部PHY芯片傳入的時鐘信號二分頻(25 MHz)后的時鐘下,并當(dāng)讀FIFO的數(shù)據(jù)量小于讀突發(fā)長度時,將SDRAM中的數(shù)據(jù)讀出再傳輸至UDP模塊。此外,對數(shù)據(jù)讀寫使用乒乓操作,其原理是當(dāng)模塊1被寫入時,數(shù)據(jù)流從模塊2讀出;當(dāng)模塊1被寫滿后,再寫入模塊2,同時數(shù)據(jù)流從模塊1讀出,即切換SDRAM的讀寫地址,作用是使數(shù)據(jù)的讀寫源源不斷以及使用低速模塊處理高速的數(shù)據(jù)流[11]。圖3為Quartus軟件自帶SignalTapⅡ邏輯分析儀實時抓取的FIFO控制模塊波形。
圖3 SignalTap波形抓取圖
從圖3可知,寫、讀地址的高2位均為Bank地址,當(dāng)寫B(tài)ank地址為00時,讀Bank地址為01;當(dāng)寫B(tài)ank地址為01時,讀Bank地址為00,即該模塊實現(xiàn)了SDRAM的乒乓讀寫操作。
傳輸控制/網(wǎng)際通訊協(xié)議(transmissioncontrol protocol/internet protocol,TCP/IP)是現(xiàn)代互聯(lián)網(wǎng)的基礎(chǔ)和標(biāo)準(zhǔn)協(xié)議[12]。TCP/IP協(xié)議定義了網(wǎng)絡(luò)互連的4層模型,即網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層[13]。其中,網(wǎng)絡(luò)層常用的協(xié)議是IP協(xié)議;傳輸層包括TCP協(xié)議和UDP協(xié)議,TCP協(xié)議常用于對數(shù)據(jù)完整性、正確性要求較高的場合,而UDP協(xié)議是一種無連接的協(xié)議[14],傳輸速度比TCP快,占用邏輯資源少,適合實時數(shù)據(jù)的傳輸,所以選用UDP傳輸層協(xié)議。以太網(wǎng)通信是以數(shù)據(jù)包的形式傳輸。UDP數(shù)據(jù)包格式如圖4所示。
圖4 UDP數(shù)據(jù)包格式
以太網(wǎng)數(shù)據(jù)包包括前導(dǎo)字段、幀起始定界符、以太網(wǎng)幀頭、IP首部、UDP首部、有效數(shù)據(jù)以及校驗[15]。介質(zhì)訪問控制(media access control,MAC)子層位于TCP/IP協(xié)議的數(shù)據(jù)鏈路層的下層,是物理層和網(wǎng)絡(luò)層的直接紐帶[16],負(fù)責(zé)和物理層進(jìn)行數(shù)據(jù)交接,如通過核對數(shù)據(jù)包的MAC地址和IP地址,觀察是否能發(fā)送數(shù)據(jù)等。當(dāng)MAC數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)層時,只有IP首部和有效數(shù)據(jù)傳入,網(wǎng)絡(luò)層接收到數(shù)據(jù)后,將有效數(shù)據(jù)發(fā)送到傳輸層,包括UDP首部和有效數(shù)據(jù)。
以太網(wǎng)的通信還需要硬件PHY芯片[17],可以發(fā)送和接收來自MAC的數(shù)據(jù)包。通過媒體獨(dú)立接口(media independent interface,MII)可以連接以太網(wǎng)MAC層和PHY芯片,實現(xiàn)以太網(wǎng)通信。常用的接口協(xié)議有:MII、RMII、SMII、GMII、RGMII。其中,RMII(reduced MII)接口是2位寬的數(shù)據(jù)位。實驗使用的PHY芯片型號為LAN8720A,板載網(wǎng)線接口(RJ45),利用該芯片通過網(wǎng)線實現(xiàn)網(wǎng)絡(luò)的通信功能,其通信速率支持10 Mbps和100 Mbps,該芯片支持通過RMII接口與以太網(wǎng)MAC層通信。圖5為RMII接口連接示意圖。
圖5 RMII接口連接示意圖
UDP模塊包括數(shù)據(jù)發(fā)送模塊和CRC-32(cyclic redundancy check)校驗?zāi)K。其中,CRC校驗?zāi)K由CRC Generation Tool生成。UDP模塊的功能是實現(xiàn)以太網(wǎng)數(shù)據(jù)的收發(fā),數(shù)據(jù)發(fā)送模塊的功能是將數(shù)據(jù)按照以太網(wǎng)格式進(jìn)行打包發(fā)送。首先,以太網(wǎng)數(shù)據(jù)包一般以32 bit為單位傳輸,為了保持格式一致,當(dāng)圖像數(shù)據(jù)打包模塊的讀數(shù)據(jù)請求信號有效時,讀取存儲在SDRAM中的16 bit的圖像數(shù)據(jù),拼接為32 bit數(shù)據(jù),并且當(dāng)圖像格式配置完成時,將該數(shù)據(jù)傳入UDP模塊,由于RMII接口為2 bit數(shù)據(jù)接口,因此該模塊需要將32 bit數(shù)據(jù)轉(zhuǎn)換為2 bit數(shù)據(jù),經(jīng)CRC校驗無誤后,通過RMII將數(shù)據(jù)發(fā)送到PHY芯片,再將數(shù)據(jù)傳輸?shù)缴衔粰C(jī)。測試結(jié)果顯示發(fā)送數(shù)據(jù)與接收數(shù)據(jù)一致,說明該模塊工作正常。
由于UDP協(xié)議性能的提高是以數(shù)據(jù)完整性和正確性為代價,因此為保證以太網(wǎng)傳輸圖像數(shù)據(jù)的準(zhǔn)確性,降低丟包帶來的影響,需要遵循傳輸?shù)闹噶顓f(xié)議,包括圖像格式指令包和數(shù)據(jù)指令包。格式指令包由包頭、設(shè)備地址、包長度、指令、圖像格式、寬、高及校驗位構(gòu)成。其中,包頭為固定數(shù)據(jù)(32’h59_48_5A_53),包長度為17 Byte,指令為數(shù)據(jù)包類型。數(shù)據(jù)指令包由包頭、設(shè)備地址、包長度、指令、圖像數(shù)據(jù)及校驗位構(gòu)成。其中,該包長度為614 412(640×2×480+12)Byte,圖像數(shù)據(jù)針對的是一幀完整圖像。
該格式配置和數(shù)據(jù)打包模塊均工作在由外部PHY芯片傳入的時鐘信號二分頻后的時鐘下,在以太網(wǎng)傳輸模塊輸出的讀數(shù)據(jù)請求信號有效,且在單包數(shù)據(jù)發(fā)送完成的前提下,當(dāng)格式配置未完成時,圖像格式配置模塊生成需要配置的數(shù)據(jù)包,并通過以太網(wǎng)模塊發(fā)送到上位機(jī),配置圖像格式;由于以太網(wǎng)數(shù)據(jù)包最大約為1 500 Byte,因此發(fā)送完整的圖像數(shù)據(jù)包需要使用多個以太網(wǎng)數(shù)據(jù)包[5]。在每幀首包數(shù)據(jù)包中,圖像數(shù)據(jù)之前添加包頭、設(shè)備地址、包長度、指令,共10Byte(32’h59_48_5a_53_00_00_09_60_0c_02)。在每幀末包數(shù)據(jù)包中,圖像數(shù)據(jù)之后添加2 Byte校驗位。當(dāng)格式配置完成時,圖像數(shù)據(jù)打包模塊將讀取暫存在SDRAM中的16 bit的圖像數(shù)據(jù),按照數(shù)據(jù)指令包格式打包,拼接為32 bit的數(shù)據(jù),傳輸至以太網(wǎng)模塊,輸出2 bit的數(shù)據(jù)。因此,數(shù)據(jù)讀入比讀出快,需要在數(shù)據(jù)打包模塊中例化FIFO模塊,存儲需要發(fā)送的數(shù)據(jù)。通過UDP模塊發(fā)送至上位機(jī),實現(xiàn)視頻的實時顯示,仿真結(jié)果顯示各個指令包的指令均正確。
(1)對系統(tǒng)圖像數(shù)據(jù)的采集、存儲、傳輸各個模塊進(jìn)行測試與驗證,通過聯(lián)合ModelSim和嵌入式SignalTap工具進(jìn)行仿真和調(diào)試,分析結(jié)果查看是否實現(xiàn)了設(shè)計模塊的功能,如果未能實現(xiàn)其功能,需要根據(jù)仿真的波形圖進(jìn)行代碼修改,直至能仿真出正確波形。如上文所示,經(jīng)驗證各個模塊運(yùn)行正常無誤,達(dá)到預(yù)期要求,即仿真通過,最后綁定管腳編譯工程。
(2)將開發(fā)板與12 V的直流電源、下載器JTAG端口、網(wǎng)線以及OV7725攝像頭相連接,網(wǎng)線的另一端連接電腦端,也可與路由器進(jìn)行連接,再使用另一根網(wǎng)線將電腦端與路由器相連。線路連接完成后打開開關(guān)為開發(fā)板上電。
(3)將代碼中的地址改為與PC機(jī)相一致的IP和MAC地址,或者也可以使用廣播方式,確保電腦端能夠接收到傳輸?shù)囊蕴W(wǎng)數(shù)據(jù)。將開發(fā)板的IP地址、MAC地址與電腦端進(jìn)行綁定,并配置上位機(jī)的協(xié)議類型、電腦IP地址及端口號。
(4)打開監(jiān)聽開關(guān),即可接收到實時傳輸?shù)囊曨l圖像。最后,打開Wireshark進(jìn)行網(wǎng)絡(luò)信號抓取。
工程重新編譯后,通過軟件Quartus II 13.0向開發(fā)板下載程序文件,實時顯示視頻圖像如圖6所示。
圖6 實時顯示的視頻圖像
上位機(jī)將實時顯示OV7725攝像頭采集到的視頻圖像,其中攝像頭的分辨率為640×480,上位機(jī)顯示的視頻清晰流暢,即滿足實驗要求,圖像數(shù)據(jù)的傳輸速率達(dá)到5.89 MB,接收幀率為10~12 fps,吞吐量為54 Mbps。為了進(jìn)一步驗證其傳輸數(shù)據(jù)的正確性,使用Wireshark工具進(jìn)行信息抓取,Wireshark抓取的數(shù)據(jù)包如圖7所示。該包可以抓取網(wǎng)絡(luò)信號、開發(fā)板和電腦的IP地址、MAC地址和端口號,以及接收的數(shù)據(jù)。普通的單包數(shù)據(jù)包為1 280 Byte,首包數(shù)據(jù)包為1 290 Byte,末包數(shù)據(jù)包為1 282 Byte,圖7中抓取的是首包數(shù)據(jù)包的詳細(xì)數(shù)據(jù),其中,包頭、設(shè)備地址、包長度和指令都與設(shè)置的一致。
圖7 Wireshark抓取的數(shù)據(jù)包
從圖7可知,Wireshark抓包的丟包率為0,不丟失圖像數(shù)據(jù)信息,故該視頻實時傳輸系統(tǒng)通過測試。此外,還可以將程序固化,存儲到片外flash中,使開發(fā)板在重新上電后能繼續(xù)工作。
本文設(shè)計了攝像頭驅(qū)動模塊、SDRAM數(shù)據(jù)讀寫控制模塊和以太網(wǎng)數(shù)據(jù)通信模塊,在Quartus II環(huán)境中使用Verilog語言對各模塊進(jìn)行描述,并進(jìn)行ModelSim仿真和板級驗證,檢驗系統(tǒng)各模塊功能的正確性,實現(xiàn)了對高質(zhì)量視頻圖像的數(shù)據(jù)采集、傳輸和實時顯示。系統(tǒng)實時顯示的視頻圖像清晰流暢,滿足實驗要求。該系統(tǒng)采用乒乓操作和UDP協(xié)議進(jìn)行視頻數(shù)據(jù)傳輸,提高了傳輸?shù)乃俣群唾|(zhì)量,同時具有耗能低,穩(wěn)定性高的優(yōu)點。FPGA硬件邏輯資源消耗如表1所示。
表1 系統(tǒng)資源消耗統(tǒng)計表
從表1可以看出,使用65 536 bit的片內(nèi)內(nèi)存,占總片內(nèi)內(nèi)存的15%,沒有耗費(fèi)大量資源,滿足硬件資源要求。
本文利用FPGA的快速并行處理、可重復(fù)編程、片內(nèi)邏輯資源豐富,以及UDP協(xié)議傳輸占用FPGA邏輯量少等特點,實現(xiàn)了基于FPGA的以太網(wǎng)視頻實時傳輸系統(tǒng)。該系統(tǒng)性能穩(wěn)定,硬件平臺便于攜帶,且移植平臺的主芯片的邏輯資源只要能滿足該系統(tǒng)的占用資源,更改管腳分配即可進(jìn)行移植,具有可移植性。而對于圖像的接收幀率和吞吐率可通過提高CPU處理能力或更改以太網(wǎng)接口設(shè)計等進(jìn)一步改善,還可以在該系統(tǒng)基礎(chǔ)上增加對圖像的算法處理,即形態(tài)學(xué)濾波、邊緣檢測等。該系統(tǒng)能夠通過路由器使用網(wǎng)線連接PC機(jī)和板卡,增大了圖像信息的傳輸距離,可應(yīng)用于智能家居、網(wǎng)絡(luò)監(jiān)控等有視頻實時傳輸要求的場景。