文獻標(biāo)識碼: A
視頻采集是進行圖像及圖形處理的第一步,目前視頻采集系統(tǒng)一般由FPGA和DSP組成,F(xiàn)PGA作為視頻采集控制芯片,DSP作為圖像處理與成像控制芯片[1]。隨著FPGA技術(shù)的發(fā)展,片內(nèi)的邏輯單元越來越多,片內(nèi)的DSP資源也越來越豐富,因此可直接在FPGA片內(nèi)進行圖像處理。目前Altera公司的FPGA支持NiosII[2]軟核,通過Avalon設(shè)備總線掛接自定義模塊,編寫用戶控制程序。本設(shè)計通過Avalon總線讀取RGB像素值進行像素處理,通過I2C總線初始化視頻解碼芯片和DVI視頻編碼芯片。NiosII是一種可配置片內(nèi)外設(shè)的軟核CPU,采用RISC精簡指令系統(tǒng),流水線處理技術(shù),用戶可自定義Avalon總線外設(shè)構(gòu)成SoC系統(tǒng),支持32 bit存儲寬度,支持DDR2、SSRAM存儲器。結(jié)合項目,采用TVP5146[3]視頻解碼芯片,F(xiàn)PGA采集解碼數(shù)據(jù)并進行隔行轉(zhuǎn)逐行、像素裁剪處理、像素YCrCb轉(zhuǎn)RGB、RGB轉(zhuǎn)灰度等處理后,采用NiosII軟核配置Avalon總線DVI接口從設(shè)備外設(shè),把儲存在SSRAM中的視頻數(shù)據(jù)依次送入DVI編碼芯片SiI178[4],帶有DVI接口的監(jiān)視器接收解碼并顯示采集的視頻數(shù)據(jù)。
1 視頻采集與DVI成像系統(tǒng)的組成
視頻采集與DVI成像硬件構(gòu)成如圖1所示。該系統(tǒng)由視頻解碼芯片、FPGA控制芯片、DVI接收編碼芯片、SSRAM和Flash組成。硬件系統(tǒng)分為模擬視頻信號解碼、視頻數(shù)據(jù)采集、圖像處理和DVI編碼顯示3大部分。
模擬視頻信號解碼由TVP5146芯片組成,該部分主要完成PAL-D制式模擬視頻信號解碼,輸出符合ITU-RBT656[5]且內(nèi)嵌同步字符4:2:2格式數(shù)據(jù)供FPGA采集。TVP5146支持NTSC、PAL、SCEAM、CVBS、S-video制式視頻輸入,具有RGB轉(zhuǎn)換為YCbCr功能。
視頻數(shù)據(jù)采集部分由FPGA控制芯片、SSRAM、Flash、電源芯片、輔助外圍電路組成。該部分以TVP5146輸出像素時鐘作為FPGA采集時鐘采集解碼后的數(shù)據(jù),在系統(tǒng)時鐘的控制下,交織乒乓存儲于SSRAM芯片,并在幀信號控制下交換存儲體。FPGA采用Altera公司CycloneII系列EP2C35F672[6]芯片,該芯片具有33 216個邏輯單元,內(nèi)部RAM高達484 KB,支持NiosII嵌入式處理器,核心電壓1.2 V,IO電壓3.3 V,具有4個PLL輸入,12個PLL輸出。Altera的FPGA采用SRAM工藝,掉電就會丟失配置數(shù)據(jù),所以外部需要掛接存儲配置數(shù)據(jù)的部件。Altera公司FPGA一般都支持串行被動配置、串行主動配置、JTAG配置,通過跳線選擇配置方式,JTAG配置在調(diào)試時很方便。串行主動配置一般需要Altera公司的專用配置芯片,在系統(tǒng)上電后主動配置芯片。FPGA配置完成后,NiosII從Flash中讀取程序,完成相應(yīng)的功能。TVP5146采用I2C口配置其工作方式,配置的數(shù)據(jù)亦存儲在Flash芯片中。SSRAM采用CY7C1380D,32 bit數(shù)據(jù)位寬,2 MB存儲空間,3.3 V供電,提供高性能3-1-1-1訪問時鐘周期速率,最高頻率達250 MHz。
圖像處理在FPGA片內(nèi)實現(xiàn),進行YCbCr轉(zhuǎn)RGB、RGB轉(zhuǎn)灰度、線性插值等處理,DVI編碼顯示在DVI接收芯片Si178片內(nèi)完成,在系統(tǒng)時鐘的控制下,依照DVI顯示時序,控制行、場同步信號,依次把RGB像素送入編碼芯片,完成圖像數(shù)據(jù)的編碼和傳輸。Si178具有25~165 M點像素每秒,24 bit模式,I2C編程接口,支持熱插拔,兼容DVI1.0標(biāo)準(zhǔn),3.3 V供電。
2 模擬視頻信號解碼
視頻解碼格式有ITU-RBT.601標(biāo)準(zhǔn)格式和ITU-RBT.656標(biāo)準(zhǔn)格式。ITU-RBT.601標(biāo)準(zhǔn)需要行、場同步信號線,ITU-RBT.656標(biāo)準(zhǔn)無需同步信號線。ITU-RBT.656標(biāo)準(zhǔn)采用8 bit傳輸格式,亮度信號Y和色度信號Cb/Cr交替?zhèn)鬏?。本設(shè)計采用ITU-RBT.656標(biāo)準(zhǔn)。我國電視制式為PAL-D,一幀電視圖像有625行,每行可視像素為720個,因為有行消隱和場消隱,實際可視像素面為720×576,電視圖像傳輸采用奇偶場交替?zhèn)鬏?,所以通常奇偶場各傳?88行。圖2是行同步4:2:2輸出時序圖。
PAL-D制式一行可視像素有720個,因為采用ITU-RBT.656標(biāo)準(zhǔn),每2個DATACLK時鐘才輸出一個像素,所以,一行可視像素需要1 440個DATACLK時鐘。一行像素輸出完畢后緊接4個行結(jié)束標(biāo)志,然后進入行消隱階段,行消隱階段結(jié)束后,4個字符的開始標(biāo)志表明一行的開始,從4個結(jié)束標(biāo)志到4個開始標(biāo)志,共有288個DATACLK時鐘。這288個DATACLK期間的數(shù)據(jù)不用于顯示,用于同步和消隱,所以對于PAL-D制式,采用ITU-RBT.656標(biāo)準(zhǔn)傳輸一行視頻需要1 728個DATACLK時鐘[7]。
EAV和SAV分別表示一行有效視頻的結(jié)束和開始,EAV/SAV序列由FF-00-00-XX表示,其中XX是狀態(tài)字,表1為EAV/SAV序列字段位表。
F場標(biāo)志:F=0是偶場,F(xiàn)=1是奇場;V視頻有無效標(biāo)志:V=0為有效視頻數(shù)據(jù),V=1為無效視頻數(shù)據(jù);H有效視頻結(jié)束起始標(biāo)志:H=0是SAV,H=1是EAV。
從624行~22行和311行~335行為無效視頻行,此時V=1;從23行~310行和336行~623行為有效視頻行,此時V=0。從1行~312行為偶場,此時F=0;從313行~625行為奇場,此時F=1。
配置TVP5146使其正確初始化。設(shè)置正常工作模式,視頻選擇輸入口,色度和亮度AGC自動增益,視頻輸入為PAL-D制式625行,解碼輸出格式為10 bit 4:2:2(2倍像素時鐘速率)內(nèi)嵌同步字符,實際10 bit輸出時最低2 bit可丟棄。設(shè)置亮度信號范圍為16~235,色度信號范圍為16~240。配置NiosII軟核,設(shè)置CPU類型為經(jīng)濟型32 bit,CPU時鐘頻率為100 MHz,復(fù)位向量起始地址為Flash,異常向量起始地址為On-chip-ram,設(shè)置PIO線模擬I2C協(xié)議,用于配置TVP5146,配置Avalon-MM三態(tài)橋用于掛接Flash,配置On-chip-ram為32 KB[8],添加一個Avalon從設(shè)備。該從設(shè)備為用戶自定義接口,NiosII軟核可以通過該從設(shè)備口實時訪問轉(zhuǎn)換后的RGB像素,進行圖像處理。
3 視頻圖像數(shù)據(jù)采集
視頻解碼芯片輸出內(nèi)嵌同步字符8 bit視頻數(shù)據(jù),參照解碼芯片輸出DATACLK時鐘,F(xiàn)PGA采集視頻解碼數(shù)據(jù)。FPGA采集之前先要進行圖像裁剪、交織處理。裁剪處理是為了產(chǎn)生640×480的像素面,交織處理即變隔行視頻數(shù)據(jù)為逐行視頻輸出,即兩場圖像交叉嵌入一個存儲體中,形成一幀。當(dāng)一幀存儲完畢后,切換存儲體,而先前的存儲體內(nèi)容參照系統(tǒng)時鐘,依次像素處理送DVI編碼芯片進行顯示。
3.1 視頻信號采集控制
視頻輸出信號為內(nèi)嵌同步字符8 bit Y:Cb:Cr=4:2:2輸出,本設(shè)計中視頻信號采集采用狀態(tài)機控制法。視頻信號采集控制狀態(tài)機表示如圖3所示。
Idel:默認(rèn)空閑狀態(tài)。如果視頻采集標(biāo)志capture置位,則進入Wait State狀態(tài);如果capture不置位,則停留在Idel狀態(tài)。
Wait State:此時如果收到數(shù)據(jù)0xff,則進入State1,其他情況仍然循環(huán)停留。
State1:如果此時收到數(shù)據(jù)0x00,則進入State2;收到其他數(shù)據(jù)則進入Error。
State2:如果此時收到數(shù)據(jù)0x00,則進入New page狀態(tài),否則狀態(tài)返回到Wait State。
New page:此時視頻處于消隱狀態(tài),如果收到的視頻數(shù)據(jù)vpo[6:5]=01,則正在消隱,轉(zhuǎn)入第一行數(shù)據(jù)接收狀態(tài)First Line,否則跳回Wait State狀態(tài)。
First Line:如果收到vpo[6:4]=000,表明下一個數(shù)據(jù)即視頻圖像數(shù)據(jù),否則返回到Wait State。
Chroma blue:正確有效的數(shù)據(jù),如果此時接收到vpo=0xff,則表明數(shù)據(jù)轉(zhuǎn)入End Line,如果收到vpo=0x00,則轉(zhuǎn)入Error狀態(tài)。
Luma blue:亮度藍(lán)色數(shù)據(jù),接收完轉(zhuǎn)入Chroma red狀態(tài)。
Chroma red:色度紅色數(shù)據(jù),接收完轉(zhuǎn)入Luma red狀態(tài)。
Luma red:亮度紅色數(shù)據(jù),接收完轉(zhuǎn)入Chroma blue狀態(tài)。
End Line:如果vpo[6:4]=011,表示奇數(shù)場結(jié)束,偶數(shù)場將要開始,轉(zhuǎn)入New line狀態(tài);如果vpo[6:4]=111,表示一幀數(shù)據(jù)結(jié)束,轉(zhuǎn)入Idle狀態(tài);如果vpo[5:4]=01,表示一行結(jié)束,下一行將要開始,轉(zhuǎn)入New line狀態(tài);否則進入Error狀態(tài)。
New Line:如果接收到的vpo[5:4]=00,表示有效數(shù)據(jù)接收,轉(zhuǎn)入Chroma blue狀態(tài);否則轉(zhuǎn)到End Line狀態(tài)。
Error:錯誤狀態(tài),ITU-RBT656規(guī)定Y=[16 235] CBCR=[16 240]范圍內(nèi),越此范圍就為錯誤狀態(tài)。如果capture=1,跳轉(zhuǎn)到Wait state狀態(tài),否則停留在Error狀態(tài)。該系統(tǒng)具有自動錯誤恢復(fù)能力。
3.2 圖像剪裁處理
PAL-D制式視頻在ITU-RBT.656標(biāo)準(zhǔn)下,輸出像素面為720×576大小,而本設(shè)計中要求輸出大小為640×480像素面,所以必須使得行720像素變?yōu)?40個,采用每9個像素丟棄1個像素,因為Y/Cb/Cr是交替輸出的,即Cb-Y-Cr-Y傳輸,每個像素都有亮度數(shù)據(jù)Y,但是色度Cr和Cb是交替的。如果第1個像素是Cb和Y數(shù)據(jù),則第8個像素即為Cr和Y數(shù)據(jù),第9個像素為Cb和Y數(shù)據(jù),現(xiàn)在丟棄第9個像素數(shù)據(jù),先把第10個素的Cr數(shù)據(jù)和第11個像素的Cb交換,這樣就保持了Cb和Cr的交替。視頻中采取每6行可視像素丟棄1行,對于576行可視像素,實際丟棄96行,即變?yōu)閷嶋H可顯示480行。
3.3 圖像交織與存儲處理
視頻信號采集控制處理后產(chǎn)生行、場、幀、視頻有效標(biāo)志及每場視頻行數(shù)、每行像素點數(shù)。本設(shè)計利用這些信號組合作為存儲地址控制字寫入SSRAM,每2個DATACLK為1個像素數(shù)據(jù),4個DATACLK為2個像素數(shù)據(jù)32 bit,F(xiàn)PGA控制每4個DATACLK寫入一次32 bit數(shù)據(jù)。
每場視頻可視行為288行,占用2進制位9 bit,奇偶場標(biāo)志1 bit,每行像素有640個,存入SSRAM時按照每2個像素寫入一次,故每行像素為360個寫入次,設(shè)計為9 bit,總共為19 bit,正好占用完19 bit地址線。
奇偶場標(biāo)志就是上述EAV/SAV狀態(tài)字中的F,電視視頻中,首先傳輸?shù)氖桥紨?shù)場,此時A9=0;其次傳輸?shù)氖瞧鏀?shù)場,此時A9=1。幀控制位frame定義為1 bit,當(dāng)完成一幀的傳輸后就使frame<=frame+1,這樣幀控制位就是0-1-0-1-0-1序列,完成一幀傳輸就翻轉(zhuǎn)一次。幀控制位用來切換存儲體,當(dāng)幀控制位切換在第一片SSRAM上時,偶數(shù)場先存入到SSRAM中,然后奇數(shù)場數(shù)據(jù)嵌入到SSRAM中。
4 圖像處理和DVI編碼顯示
視頻采集的圖像已經(jīng)交替存入SSRAM中,當(dāng)一幀存儲完畢,該存儲體就可以進行處理上傳。圖像處理包括Y/Cb/Cr 4:2:2格式轉(zhuǎn)化為Y/Cb/Cr 4:4:4,Y/Cb/Cr轉(zhuǎn)化為RGB格式,可實時RGB像素處理,像素處理后按照行、場同步信號依次送入DVI芯片。
4.1 YCrCb轉(zhuǎn)RGB處理
首先處理的是Y/Cb/Cr 4:2:2格式轉(zhuǎn)化為Y/Cb/Cr 4:4:4格式,就是對每個像素擴展其色度數(shù)據(jù),使得每個像素為24 bit。其中8 bit為亮度數(shù)據(jù),8 bit為Cr數(shù)據(jù),8 bit為Cb數(shù)據(jù)。
由YCrCb數(shù)據(jù)轉(zhuǎn)換為RGB數(shù)據(jù)可按照下式:
R=1.164×(Y-16)+1.596×(Cr-128)
G=1.164×(Y-16)-0.813×(Cr-128)-0.392×(Cb-128)(1)
B=1.164×(Y-16)+2.017×(Cb-128)
實際上FPGA片內(nèi)不能進行小數(shù)運算,因此把需要運算的數(shù)左移9 bit,且運用FPGA片內(nèi)的乘法器宏單元完成。則式(1)變?yōu)槭?2):
R=596×Y+817×Cr-114 131
G=596×Y-416×Cr-200×Cb+69 370(2)
B=596×Y+1 033×Cb-141 787
這樣得到的RGB信號只需要右移9 bit就可以得到正確的8 bit數(shù)據(jù)位寬度的RGB信號,對RGB像素的處理受NiosII核控制,掛接在NiosII核上的Avalon從設(shè)備有3 bit控制信號,其值從0~7,分別對應(yīng)灰度處理、像素水平線性放大插值處理、水平縮小處理、原三彩色輸出和無定義。
若進行灰度處理,則按照下式計算:
Y=0.299×R+0.587×G+0.114×B(3)
在計算時也需要先左移9 bit,采用3路乘法MULT_
ADD宏單元計算,計算結(jié)果右移9 bit。如果進行水平像素放大,則采取線性插值法,其他圖像處理按照相應(yīng)算法進行。
4.2 視頻數(shù)據(jù)輸出和DVI配置
DVI輸出刷新頻率為75 Hz,輸出屏幕像素為640×480,查VGA時序表得到在640×480@75 Hz時,水平像素總共為840,垂直像素總共為500,行頻為37.5 kHz,點時鐘頻率為31.5 MHz,這個頻率由FPGA片內(nèi)PLL倍頻得到。配置DVI芯片引腳,設(shè)置IDCK+為像素時鐘31.5 MHz,IDCK-接地,DE表示有效像素數(shù)據(jù)使能,其值在有效行和有效列內(nèi)為高電平,否則為低電平。行、場同步信號由在FPGA片內(nèi)編寫的DVI模塊產(chǎn)生時序控制。通過I2C口配置SiI178芯片,設(shè)置其為正常工作方式,VSYNC、HSYNC為正常輸入狀態(tài),輸入總線為24 bit寬,IDCK+下降沿將數(shù)據(jù)打入DVI編碼芯片。
系統(tǒng)采用FPGA為主控芯片,通過一片F(xiàn)PGA完成視頻解碼數(shù)據(jù)的采集和圖像處理,并在FPGA片內(nèi)配置NiosII軟核,作為初始化TVP5146和SiI178使用,在圖像處理模塊中掛接Avalon從設(shè)備,YCbCr轉(zhuǎn)換為RGB后可以通過NiosII處理器編寫C算法處理或者通過NiosII的標(biāo)志信號進行處理,處理結(jié)果直接送DVI編碼器。采用乒乓交織算法,保證了圖像不閃爍和無鋸齒現(xiàn)象。
參考文獻
[1] 錢建良.DSP+FPGA嵌入式多路視頻監(jiān)控系統(tǒng)硬件平臺 [J].電子產(chǎn)品世界,2007(11).
[2] Altera.Nios II Hardware Development Tutorial[DB/OL]. www.altera.com,2004.
[3] TI.TVP5146 Datasheet[DB/OL].www.ti.com,2007.
[4] Silicon Image.SiI178 Datasheet[DB/OL].www.siliconimage.com,2004.
[5] The ITU Radiocommunication Assembly.Recommendation ITU-R BT.656-4[DB/OL].www.itu.com,1998.
[6] Altera.EP2C35F672 Datasheet.www.altera.com,2004.
[7] 劉韜,樓興華.FPGA數(shù)字電子系統(tǒng)設(shè)計與開發(fā)實例導(dǎo)航[M].北京:人民郵電出版社,2005.
[8] 王建校,危建國.SOPC設(shè)計基礎(chǔ)與實踐[M].西安:西安電子科技大學(xué)出版社,2006.