《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于NiosII的視頻采集與DVI成像研究及實現(xiàn)
基于NiosII的視頻采集與DVI成像研究及實現(xiàn)
蔡欣榮,許泰峰,奚冠巍
中國船舶重工集團公司江蘇自動化研究所,江蘇 連云港222006
摘要: 采用FPGA作為視頻采集控制和圖像處理芯片,配置NiosII軟核,在FPGA片內(nèi)完成圖像處理和圖像顯示控制,簡化了硬件電路和軟件程序的設(shè)計。在FPGA片內(nèi)編寫視頻采集時序,并配置NiosII控制軟核,模擬視頻數(shù)據(jù)經(jīng)視頻解碼芯片輸出ITU-RBT.656格式數(shù)據(jù)送入FPGA,通過時序控制和NiosII軟核把視頻解碼數(shù)據(jù)依序存儲在SSRAM中,并進行裁剪、交織、顏色處理。
關(guān)鍵詞: SoPC 圖像采集 FPGA ITU-RBT.656 DVI
中圖分類號: TP274+2
文獻標(biāo)識碼: A
Research and realization of video capture based on NiosII and DVI imaging
CAI Xin Rong,XU Tai Feng,XI Guan Wei
JiangSu Automation Research Institute of CSIC, Lianyungang 222006,China
Abstract: This paper takes FPGA as video capture control and image processing chip, configure NiosII processor, processing image in FPGA, that simplify hardware circuit design and software design. Designing control program and burning it into FPGA, configuring NiosII processor, analog video signal captured by video decode chip and output the ITU-RBT.656 data sequence, the data sequence is captured by FPGA, through time scheduling and NiosII processor control , put the decoded data sequence into SSRAM, and take image cut out , interlace and color process and so on.
Key words : video capture;FPGA;NiosII processor;ITU-RBT.656;digital visual interface


    視頻采集是進行圖像及圖形處理的第一步,目前視頻采集系統(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&times;(Y-16)+1.596&times;(Cr-128)
  G=1.164&times;(Y-16)-0.813&times;(Cr-128)-0.392&times;(Cb-128)(1)
  B=1.164&times;(Y-16)+2.017&times;(Cb-128)
    實際上FPGA片內(nèi)不能進行小數(shù)運算,因此把需要運算的數(shù)左移9 bit,且運用FPGA片內(nèi)的乘法器宏單元完成。則式(1)變?yōu)槭?2):
    R=596&times;Y+817&times;Cr-114 131
    G=596&times;Y-416&times;Cr-200&times;Cb+69 370(2)
    B=596&times;Y+1 033&times;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&times;R+0.587&times;G+0.114&times;B(3)
    在計算時也需要先左移9 bit,采用3路乘法MULT_
ADD宏單元計算,計算結(jié)果右移9 bit。如果進行水平像素放大,則采取線性插值法,其他圖像處理按照相應(yīng)算法進行。
4.2 視頻數(shù)據(jù)輸出和DVI配置
    DVI輸出刷新頻率為75 Hz,輸出屏幕像素為640&times;480,查VGA時序表得到在640&times;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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。