基于FPGA和ARM的視頻采集處理系統(tǒng)
近年來,視頻技術(shù)的飛速發(fā)展,使得視頻產(chǎn)品越來越普及。視頻信號采集是整個視頻應(yīng)用的前端部分,扮演著極其重要的作用。傳統(tǒng)的圖像采集卡面向計算機應(yīng)用,體積大,可靠性有待進一步提高,于是便產(chǎn)生了一些新的視頻采集方法,這些方案有的基于FPGA和DSP,有的基于ARM和編碼芯片,在實時性、靈活性、 可維護性方面各有千秋。本文針對FPGA在數(shù)字信號處理速度上的優(yōu)勢以及ARM在控制方面的長處,設(shè)計了一種全數(shù)字化的實時視頻采集系統(tǒng),具有很實用的參考價值。
1 系統(tǒng)構(gòu)成
本系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,圖像傳感器模塊負責(zé)圖像采集,F(xiàn)PGA產(chǎn)生I2 C時序控制CMOS圖像傳感器芯片,并將采集到的圖像數(shù)據(jù)進行相應(yīng)處理后送到壓縮芯片ZR36060進行壓縮;ARM負責(zé)壓縮芯片的驅(qū)動、以太網(wǎng)芯片的控制和UDP/IP協(xié)議的實現(xiàn),以及視頻采集系統(tǒng)的指令控制和數(shù)據(jù)傳輸, 以太網(wǎng)模塊主要實現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸。SDRAM做數(shù)據(jù)暫存與ARM存儲空間的擴展,采集到的視頻圖像以幀為單位通過網(wǎng)卡芯片傳送到網(wǎng)絡(luò)。
圖 1
2 硬件設(shè)計
2.1 圖像傳感器
圖像傳感器采用MICRON公司的MT9M131。它是一種彩色CMOS圖像傳感器,可支持SXVGA、VGA、QVGA等顯示格式,I2 C總線接口,最大支持分辨率1280*1024,在VGA格式下可達到30幀/每秒的采集速度,并具有自動曝光控制、自動增益控制、自動白平衡、自動帶通濾波、自動黑級校準等功能。本系統(tǒng)采用VGA格式,CMOS傳感器的控制時序由FPGA產(chǎn)生。
2.2 FPGA器件
FPGA器件的主要功能包括圖像傳感器的控制、采集后的圖像數(shù)據(jù)處理和格式轉(zhuǎn)換,為了采集到質(zhì)量更好的圖像,將來還會在此部分加入一些相應(yīng)的處理算法。因此,為保證系統(tǒng)的實時性,系統(tǒng)選用了Altera公司Cyclone II系列的EP2C35F672C6。該芯片具有35000個邏輯單元、672個引腳、475個用戶自定義I/O接口、35個嵌入式乘法器和4個鎖相環(huán),完全可以滿足系統(tǒng)要求。
2.3 ARM處理器和網(wǎng)卡芯片
ARM處理器選用三星公司的S3C2410,該處理器擁有獨立的16KB指令Cache和16KB數(shù)據(jù)Cache,MMU,支持TFT的LCD控制器,NAND閃存控制器,3路串口,4路DMA,4路帶PWM的時鐘,最高可運行在203MHz。系統(tǒng)采用的網(wǎng)卡芯片是CS8900A,它是用于嵌入式設(shè)備的低成本以太局域網(wǎng)控制器。它的高度集成設(shè)計使其不再需要其它以太網(wǎng)控制器所必需的昂貴外部器件。
CS8900A包括片上RAM,10Base-T傳輸和接收濾波器,以及帶24毫安驅(qū)動的直接ISA-總線接口。除了高度集成,CS8900A還提供其它性能和配置選擇。它獨特的PacketPage結(jié)構(gòu)可自動適應(yīng)網(wǎng)絡(luò)通信量模式的改變和現(xiàn)有系統(tǒng)資源,從而提高系統(tǒng)效率。圖2為網(wǎng)卡芯片與S3C2410的接口示意圖。
圖 2
2.4 視頻壓縮芯片
JPEG編解碼芯片ZR36060是專為視頻采集與編輯應(yīng)用而設(shè)計的,可以方便地實現(xiàn)對視頻信號的實時壓縮和解壓縮。在進行壓縮時,ZR36060接受 YUV4:2:2數(shù)字視頻信號,將其編碼為JPEG碼流輸出。ZR36060對像素塊和CCIR視頻信號可實現(xiàn)高達25~30幀/秒的壓縮;靈活的數(shù)據(jù)接口,支持三種YUV視頻接口模式,即8位主模式、16位從模式和8位從模式;3種不同的比特率控制模式用于靜止和運動視頻的壓縮;可以和多種常用視頻解碼器實現(xiàn)無縫連接[1]。據(jù)統(tǒng)計,JPEG格式的壓縮比例約為70~80:1,而本系統(tǒng)中采用的分辨率并不高(640*480),直接使用ZR36060進行幀內(nèi)編碼壓縮可以滿足要求,同時也減少了FPGA部分的開發(fā)工作量。
3 關(guān)鍵模塊的工作原理
3.1 圖像傳感器驅(qū)動
MT9M131是標(biāo)準的I2 C總線器件,接口簡單,傳感器工作時只有6個控制信號。其中MCLK由FPGA產(chǎn)生,是傳感器工作時鐘輸入;FVAL是幀有效信號,它的上升沿表示一幀數(shù)據(jù)的開始。在FVAL信號的有效期間內(nèi)包含了480個行有效信號LVAL,而每個LVAL信號的高電平期間包含了數(shù)據(jù)總線上640個像素數(shù)據(jù)的輸出。所以,在FVAL一個周期內(nèi),圖像傳感器正好輸出了完整的一幀圖像。分辨率為640×480。僅當(dāng)FVAL和LVAL信號同時為高電平時,傳感器輸出數(shù)據(jù) D[9:0]有效,F(xiàn)PGA在每個像素時鐘PIXCLK上升沿時將有效數(shù)據(jù)讀入。經(jīng)實測,傳感器正常工作時,SCLK,LVAL頻率約為7.56kHz和 14.2kHz。
本系統(tǒng)采用Verilog HDL語言來編寫CMOS圖像傳感器的時序驅(qū)動。在實際設(shè)計中,把控制模塊分成兩部分:I2C_Config模塊根據(jù)設(shè)定的曝光時間來發(fā)生I2 C總線SCLK和SDAT時序,而Capture模塊則負責(zé)與傳感器的數(shù)據(jù)接口,讀入10位的圖像數(shù)據(jù),并送到下一級模塊進行相應(yīng)處理。以下是 Capture模塊部分代碼:
always@(posedge iCLK or negedge iRST)
begin
if(!iRST)
……… //各信號清零復(fù)位
else
begin
Pre_FVAL <= iFVAL;
if( ({Pre_FVAL,iFVAL}==2'b01) && mSTART )
//當(dāng)前幀有效且前一幀處理完
mCMOS_FVAL <= 1;
else if({Pre_FVAL,iFVAL}==2'b10) //正
在處理前一幀
mCMOS_FVAL <= 0;
mCMOS_LVAL <= iLVAL;
mCMOS_DATA <= iDATA;
//讀取數(shù)據(jù)送入FPGA
if(mCMOS_FVAL)
//幀有效
begin
if(mCMOS_LVAL)
//行有效
begin
if(X_Cont<639)
X_Cont <=X_Cont+1;
else
begin
X_Cont <=0;
Y_Cont < = Y _
Cont+1; //計算像素坐標(biāo),方便后續(xù)模塊顯示
圖 3
3.2 格式轉(zhuǎn)換模塊
從數(shù)字圖像傳感器傳來的原始圖像質(zhì)量,在整個系統(tǒng)的性能影響中占主要地位,對后續(xù)的視頻壓縮和傳輸速度有著非常重要的影響。后期將會在采集前端加入相應(yīng)的圖像處理算法。而大多數(shù)處理算法都是基于RGB顏色空間的,為了進行視頻壓縮以減小數(shù)據(jù)量,就需要進行RGB到Y(jié)UV的顏色轉(zhuǎn)換。
YCbCr是YUV屬于顏色空間的一種儲存格式,適用于MPEG、JPEG等格式的編碼。相比RGB色彩空間,YCbCr色彩空間有一個顯著的優(yōu)點。Y的存儲可以采用和原來畫面一樣的分辨率,但是Cb,Cr的存儲可以使用更低的分辨率。這樣可以占用更少的數(shù)據(jù)量,并且在圖像質(zhì)量上沒有明顯的下降。所以,將色彩信息以低于量度信息的分辨率來保存是一個簡單有效的圖像壓縮方法。
在ITU-R BT.601標(biāo)準中,建議在計算Y時,權(quán)重選擇為kr=0.299,kg=0.587,kb=0.114。于是常用的轉(zhuǎn)換公式如下:
Y=0.299R+0.587G+0.114B
Cb=0.564(B-Y)
Cr=0.713(R-Y)
采用硬件描述語言進行編程之前,需要消除浮點數(shù)運算。合理利用硬件資源是編寫代碼時要充分考慮的。對于常系數(shù)乘法單元,其占用的LEs(Logic Elements)與系數(shù)大小有關(guān)。為了避免出現(xiàn)負數(shù)和溢出問題,最終采用的轉(zhuǎn)換公式如下:
Y = [CA*27] *(R - G)+ G + [CB*27] *(B - G)+ YOFFSET
Cb = [CC*27] *(B – Y)+ COFFSET
Cr = [CD*27] *(R – Y)+ COFFSET ([ ]符號表示取整運算)
各參數(shù)的取值見表1[2]。
表1 各參數(shù)值
CA0.299 CC0.492
CB 0.114CD0.877
YOFFSET 16 COFFSET 128
3.3 圖像壓縮控制
ZR36060的控制接口示意圖如圖3所示,VCLK和VCLK2是需要外部提供的時鐘信號,由FPGA產(chǎn)生的PIXCLK為25MHZ,滿足系統(tǒng)要求。 VCLK是VCLK2的分頻,并要求與VCLK2同步。
本系統(tǒng)選擇ZR36060工作狀態(tài)為:8位代碼從模式,視頻同步從模式,8位視頻總線寬度。ZR36060的接口可分為視頻接口、主機接口和代碼接口三部分。視頻信號由視頻接口Y[7:0]輸入,主機接口通過DATA[7:0]對芯片內(nèi)部寄存器設(shè)置,控制工作狀態(tài),壓縮后的碼流通過代碼接口 CODE[7:0]輸出到存儲器中緩存。8位代碼從模式下,主控制器的數(shù)據(jù)總線DATA[7:0]通過讀寫HostData對ZR36060的內(nèi)部寄存器進行設(shè)置和讀取,代碼總線CODE[7:0]從CODEFIFO讀寫JPEG數(shù)據(jù)。行同步信號HSYNC接到圖像傳感器的LVAL引腳,場同步信號 VSYN接到傳感器的FVAL引腳。奇偶場指示信號由FPGA給出,每采集到FVAL的上升沿,IND信號翻轉(zhuǎn)一次,以指示奇偶場。
3.4 以太網(wǎng)數(shù)據(jù)傳輸
本系統(tǒng)采用UDP/IP協(xié)議來實現(xiàn)圖像數(shù)據(jù)的網(wǎng)絡(luò)傳輸。壓縮后的圖像數(shù)據(jù)經(jīng)ARM進行UDP數(shù)據(jù)打包后,存儲在SDRAM中。一個完整的數(shù)據(jù)幀格式包括以太網(wǎng)頭、IP頭、UDP頭和一行圖像數(shù)據(jù),其系統(tǒng)工作流程圖見圖4所示。ZR36060 每壓縮完成一幀,就由S3C2410讀取并寫到SDRAM中,然后判斷是否讀完一幀圖像數(shù)據(jù),讀完后則發(fā)送UDP包,將圖像數(shù)據(jù)通過以太網(wǎng)發(fā)送到網(wǎng)絡(luò)。
4 小結(jié)
本文提出了一種基于FPGA和ARM的視頻采集處理系統(tǒng),其特點在于設(shè)備接口和視頻信號處理的全數(shù)字化,系統(tǒng)結(jié)構(gòu)緊湊,體積小巧、響應(yīng)快速;基于FPGA的前端處理更增加了圖像處理算法升級的靈活性,適用于工業(yè)遠程監(jiān)控等多種場合。后期還可在采集端加入相應(yīng)的圖像處理算法,以提高圖像質(zhì)量。
參考文獻:
[1] 陳曉敏, 王學(xué)進, 王志華, 張利. JPEG 編解碼芯片ZR36060在遠程視頻監(jiān)視系統(tǒng)中的應(yīng)用[J]. 電子技術(shù)應(yīng)用, 2006. 10.
[2] 魏博, 肖文, 王叢琳, 戎路. 基于FPGA 的CMOS 圖像傳感器的驅(qū)動開發(fā)[J]. 光學(xué)與光電技術(shù), 2008, 10: 56-58.
[3] Gabor Szedo. Color-Space Converter: RGB to YCrCb. Xilinx Corp, 2006.
[4] 吳繼華, 王誠. Altera FPGA/CPLD設(shè)計[M]. 人民郵電出版社, 2005.