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