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