趙小歡,夏靖波,趙 旭,郭威武
(中國人民解放軍空軍工程大學(xué) 電訊工程學(xué)院,陜西 西安 710077)
視頻圖像信號的突出特點(diǎn)是信息量巨大,以我國數(shù)字廣播中廣泛采用的PAL制式為例,標(biāo)準(zhǔn)的數(shù)字化PAL電視分辨力為720×576,24 bit的色彩位深,1幀圖像的信息量為 720×576×24 bit=9.95328 Mbit,而 PAL 標(biāo)準(zhǔn)中每秒掃描25幀圖像,則每秒傳送的信息量為9.95328×25=248.832 Mbit。另一方面,視頻信號需要嚴(yán)格的時鐘同步,在視頻的采集與顯示過程中,即使僅一個像素錯位,整幅畫面也會失步。CPLD與FPGA等可編程邏輯器件集成度與速度都有很大的提高,而且價(jià)格較低,在圖像顯示控制方面有較多應(yīng)用。文獻(xiàn)[1],[2]采用可編程邏輯器件完成LCD控制電路設(shè)計(jì),文獻(xiàn)[3]設(shè)計(jì)了一種LCD控制器的IP核,基于FPGA的LCD控制器在靈活性與價(jià)格方面都比專用顯卡芯片具有優(yōu)勢。
本設(shè)計(jì)基于“FPGA+SAA7111A”的結(jié)構(gòu),利用 FPGA的硬件并行處理和在線可編程能力解決視頻信號信息量大和制式繁多的問題,通過Verilog HDL編程實(shí)現(xiàn)視頻采集以及TFT LCD驅(qū)動等各種復(fù)雜時序信號的產(chǎn)生與控制,實(shí)現(xiàn)了高質(zhì)量、小體積、低成本的視頻播放器。
電視信號除了需要傳送輝度信號Y以外,還必須用次載波來傳送色差信號BY及RY。復(fù)合視頻信號將BY及RY以3.58 MHz的次載波載送在Y信號里,同時還包括了行同步信號、行消隱信號、場同步信號、場消隱信號等同步信號。為了得到圖像信號,首先需要采用梳狀濾波器將3.58 MHz的色度信號與Y信號分離,得到Y(jié),C信號(即S-Video),然后以不同的速率對這兩路信號采樣、編碼就得到各種標(biāo)準(zhǔn)的圖像信號。
本設(shè)計(jì)采用Philips公司的SAA7111A來完成復(fù)合視頻信號的解碼。SAA7111A是一種增強(qiáng)型視頻輸入處理器芯片,它能夠完成視頻制式自動識別、A/D變換、同步時序信號分離、亮度色度調(diào)整、色彩空間變換等功能,極大地減輕了設(shè)計(jì)的復(fù)雜度和體積。同時,SAA7111A是一種標(biāo)準(zhǔn)的I2C器件,需要通過I2C總線對其初始化。為了減小視頻播放器的體積及成本,設(shè)計(jì)中采用FPGA模擬I2C主控制器來完成SAA7111A的配置過程。
設(shè)計(jì)中采用的TFT LCD為光聯(lián)科技的UMSH-8044MD-T。該TFT LCD分辨力為320×240,支持RGB(5∶6∶5)格式圖像顯示。本設(shè)計(jì)通過FPGA產(chǎn)生LCD需要的各種時序信號,驅(qū)動該TFT LCD完成視頻播放。
該系統(tǒng)結(jié)構(gòu)如圖1所示,它主要完成對視頻信號的采集并實(shí)時播放。整個視頻系統(tǒng)由3部分組成。
圖1 系統(tǒng)結(jié)構(gòu)框圖
1)視頻解碼模塊,該部分通過FPGA來配置視頻處理芯片SAA7111A,實(shí)現(xiàn)模擬視頻信號的數(shù)字化,為系統(tǒng)后面的模塊提供RGB(5∶6∶5)格式的標(biāo)準(zhǔn)數(shù)字視頻信號。
2)圖像緩存與控制模塊。該部分是整個系統(tǒng)的關(guān)鍵,它協(xié)調(diào)著采集與顯示的同步。一方面通過FPGA編程控制SRAM存儲所需分辨力的數(shù)字視頻信號;另一方面,采用2塊SRAM實(shí)現(xiàn)雙緩存,通過乒乓機(jī)制,確保FPGA向一塊SRAM寫圖像數(shù)據(jù)的同時,LCD能夠接收到另一塊SRAM的數(shù)據(jù),始終保證LCD接收到連續(xù)、穩(wěn)定的視頻流。
3)TFT LCD驅(qū)動模塊,該部分通過FPGA產(chǎn)生LCD顯示時序,實(shí)現(xiàn)TFT LCD顯卡的功能,確保SRAM中的數(shù)據(jù)正確輸出到LCD。
SAA7111A解碼芯片需要通過I2C總線對其初始化才能正常工作。由于I2C總線時序比較簡單,并且該設(shè)計(jì)僅涉及到單主控制器、單從器件的情況,不需要仲裁過程,更加降低了難度,因此這里采用FPGA模擬I2C主控制器來完成SAA7111A的配置過程。I2C總線時序如圖2所示,每次傳送完1 byte后,需要接收到從器件的響應(yīng)后再傳送下一字節(jié)。
圖2 I2C數(shù)據(jù)傳送時序
為了判斷SAA7111A是否解碼正確,建議同時編寫對SAA7111A的讀程序,通過讀取SAA7111A的狀態(tài)寄存器0x1F的值來判斷解碼芯片的工作狀態(tài)。值得注意的是,SAA7111A對晶振精度要求較高,稍有偏差就會造成顏色分量的失真。前兩次采用無源晶振,SAA7111A均解碼不正確,建議采用精度更高的有源晶振。
SAA7111A場同步信號VREF、行同步信號HREF、奇偶場信號RTS0、像素時鐘信號LLC2的時序見圖3。
圖3 FPGA圖像采集時序圖
當(dāng)RTS0為1時,表明輸出為奇數(shù)場,當(dāng)場同步信號VREF有效時,對行同步信號HREF計(jì)數(shù)到83時,啟動行有效信號。同理當(dāng)行同步信號HREF有效時,對像素時鐘信號LLC2計(jì)數(shù)到200時,啟動數(shù)據(jù)有效信號,開始采集圖像數(shù)據(jù)[4]。采用該方式可以靈活的控制采集信號的分辨力,這里將分辨力設(shè)為320×240,是為了滿足TFT LCD分辨力的需要。由于SAA7111A解碼出來的數(shù)字視頻信號采用隔行掃描的方式,而TFT LCD是逐行顯示,所以該奇數(shù)場采集了120行數(shù)據(jù)。
在這里FPGA接收4個輸入時鐘,即VREF,HREF,RTS0和LLC2。為了保證時鐘的可靠性,將像素時鐘信號LLC2引入FPGA的全局時鐘引腳作為全局時鐘。
對圖像數(shù)據(jù)的定位,采用下列方法:調(diào)用FPGA的ROM宏模塊,建立1個表,保存行首地址,每次存儲數(shù)據(jù)時,行首地址采用查表得到,行內(nèi)地址采用計(jì)數(shù)的方式[5-6]。
這樣做的好處是:1)可消除隔行掃描信號與逐行掃描信號的差異,由于行首地址已固定,行內(nèi)地址都采用計(jì)數(shù)的方式,奇偶場信號的存儲方法完全一樣。2)可準(zhǔn)確定位整幅圖像每行的行首地址,即使某一個數(shù)據(jù)受到干擾,則失步只存在于該像素所在行,其他行仍然同步。
如圖4所示,像素?cái)?shù)據(jù)需要在行同步信號HSYNC、幀同步信號VSYNC、像素時鐘CLK以及使能信號ENAB(圖中由V_EN和H_EN)的配合下才得以在LCD上正確顯示。一副圖像被各種時序信號分成了若干區(qū)域,只有圖中有效像素區(qū)的數(shù)據(jù)會被顯示到LCD上。當(dāng)行同步信號HSYNC、幀同步信號VSYNC均處于有效像素區(qū)時,輸出使能信號ENAB有效,使數(shù)據(jù)輸出;而當(dāng)HSYNC和VSYNC處于消隱期間,關(guān)閉使能信號,禁止數(shù)據(jù)輸出。
圖4 LCD顯示框圖
圖5顯示了VSYNC與HSYNC的時序關(guān)系。由于該時序關(guān)系比較復(fù)雜,而且LCD對時序要求比較嚴(yán)格,這里采用有限狀態(tài)機(jī)來產(chǎn)生各種時序信號[7]。
圖5 VSYNC產(chǎn)生時序圖
系統(tǒng)采用的TFT LCD標(biāo)準(zhǔn)像素時鐘為6.4 MHz,為了便于時鐘同步,這里將LLC2二分頻作為顯示時的像素時鐘(即CLK=LLC2/2=6.25 MHz)。系統(tǒng)中采用的攝像頭輸出的是PAL信號,則顯示1屏圖像需要0.0204 s。而SAA7111A可在1 s采集25幀圖像,即采集1幀圖像需要0.04 s時間。這樣采集1幀圖像的同時LCD大約需要刷新2次。不妨采用奇偶場信號RTS0的時鐘變化來產(chǎn)生INT_Syn標(biāo)志表示1幀的開始,這樣需要LCD每次讀SRAM中的數(shù)據(jù)2次后才能切換到讀另一塊SRAM。
從圖5可以看出,VSYNC的產(chǎn)生可以分為4個狀態(tài):S0,S1,S2 和 S3。 各狀態(tài)之間的轉(zhuǎn)換為 S0→S1→S2→S3→S0,通過狀態(tài)機(jī)描述如下:
1)S0為幀同步脈寬階段。INT_Syn到來,標(biāo)志一幀的開始,此時VSYNC為1,幀有效信號VDEN為0,對HSYNC計(jì)數(shù)從0到VSPW。
2)S1為垂直后掃階段。此時VSYNC為0,幀有效信號VDEN為0,對HSYNC計(jì)數(shù)從0到VBPD。
3)S2為幀有效階段。此時VSYNC為0,幀有效信號VDEN為1,對HSYNC計(jì)數(shù)從0到LINEVAL。
4)S3為垂直前掃階段。此時VSYNC為0,幀有效信號VDEN為0,對HSYNC計(jì)數(shù)從0到VFPD。
行同步HSYNC信號的產(chǎn)生過程同VSYNC類似,只不過HSYNC的各個狀態(tài)是對CLK計(jì)數(shù)。當(dāng)幀有效信號VDEN與行有效信號HDEN均為1時,打開LCD數(shù)據(jù)使能端ENAB,LCD接收SRAM送來的數(shù)據(jù)。當(dāng)然,由于LCD的差異,可能在時序產(chǎn)生時需要對前消隱、后消隱信號有所調(diào)整才能顯示出無錯位的圖像。
通過Verilog HDL編程語言來描述以上狀態(tài)機(jī),在Quartus II 6.0開發(fā)環(huán)境中仿真得到TFT LCD顯示時序(見圖6)。通過該仿真可以看出,采用有限狀態(tài)機(jī)較好地解決了視頻顯示復(fù)雜時序的問題,得到了TFT LCD顯示所需的各種時序信號。
圖6 TFT LCD顯示仿真時序
以上分別介紹了視頻采集以及TFT LCD顯示驅(qū)動功能的實(shí)現(xiàn),但由于采集與顯示都是連續(xù)不間斷的,故需要協(xié)調(diào)采集與顯示的同步才能正常播放視頻。這里采用雙緩存結(jié)構(gòu),通過乒乓緩存操作確保LCD不間斷地接收數(shù)據(jù)[8]。當(dāng)FPGA向SRAM1寫入數(shù)據(jù)時,LCD接收來自SRAM2的數(shù)據(jù),這時LCD數(shù)據(jù)口和SRAM2相接,卻必須和SRAM1隔離;反過來,當(dāng)FPGA向SRAM2寫入數(shù)據(jù)時,LCD接收來自SRAM1的數(shù)據(jù),這時LCD數(shù)據(jù)口和SRAM1相接,卻必須和SRAM2隔離。這里采用如圖7所示電路解決這一問題。
圖7 雙緩存切換控制電路示意圖
圖7中,引入switch控制信號作為緩存切換標(biāo)志,其中switch信號每當(dāng)RTS0上升沿到來時翻轉(zhuǎn)一次。當(dāng)switch 為 1 時,vpo[15∶0]與 sram1_data[15∶0]接通,而由于三態(tài)門為高組態(tài),vpo[15∶0]與 sram2_data[15∶0]隔離,而在數(shù)據(jù)輸出端通過多路選擇器使DATAB即sram2_data[15∶0]輸出到 lcd_data[15∶0]。同理,當(dāng) switch 為 0 時,vpo[15∶0]與 sram2_data[15∶0]接通而與 sram1_data[15∶0]隔離,lcd_data[15∶0]接收SRAM1的數(shù)據(jù)。而SRAM地址產(chǎn)生則比較簡單,只需要在每幀到來時從零開始計(jì)數(shù)即可。通過此種方案可以很好地解決視頻采集與顯示的切換,視頻播放效果如圖8所示,視頻播放比較流暢,清晰度較好。
圖8 LCD顯示視頻
筆者設(shè)計(jì)并實(shí)現(xiàn)了一種基于FPGA的視頻播放器,經(jīng)過仿真與測試,每秒能夠播放25幀視頻,且適用于分辨力在720×576以下的各種TFT LCD。
筆者將視頻的采集以及TFT LCD的驅(qū)動集成在一塊FPGA中,實(shí)現(xiàn)了視頻播放的功能。同時,該方案與其他方案相比,不僅減小了視頻采集與顯示時鐘同步的難度,又縮小了系統(tǒng)的體積,更為重要的是該方案完全在線可編程,具有非常好的靈活性。另外,隨著數(shù)字圖像處理技術(shù)的日益發(fā)展及成熟,該方案也可作為圖像處理系統(tǒng)中的前端視頻采集部分,為數(shù)字圖像處理部分提供高速、可控的視頻流。
[1]LEI Jingming,ZHOU Xuechen.Dynamic dithering algorithm and frame rate control technique for liquid crystal display controller[C]//Proc.ASICON2003.[S.l.]:IEEE Press,2003:740-743.
[2]ITAKURA T, MINAMIZAKI H,SAITO T,et al.A 402-output TFTLCD driver IC with power control based on the number of colors selected[J].Solid-State Circuits,2003,38(3):503-510.
[3]程佺,沈緒榜.一種LCD顯示控制器IP核的設(shè)計(jì)與驗(yàn)證[J].計(jì)算機(jī)與數(shù)字工程,2004,32(1):5-8.
[4]程穎,王銳.SAA7111A芯片在視頻圖像處理FPGA設(shè)計(jì)中的應(yīng)用[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2007,30(11):1399-1403.
[5]武乾永,陳賓.基于FPGA的實(shí)時圖像數(shù)據(jù)采集模塊設(shè)計(jì)[J].微電子學(xué),2008,38(3):453-456.
[6]陳彬.基于FPGA的視頻圖像處理系統(tǒng)設(shè)計(jì)[D].重慶∶重慶大學(xué),2006.
[7]方勇,呂國強(qiáng),彭良清,等.3D顯示器視頻轉(zhuǎn)換系統(tǒng)設(shè)計(jì)及其FPGA實(shí)現(xiàn)[J].液晶與顯示,2007,22(1):94-98.
[8]周劍波,鞏憲鋒,王長松,等.利用FPGA和USB總線的視頻圖像的采集與處理系統(tǒng)設(shè)計(jì)[J].北京科技大學(xué)學(xué)報(bào),2006,28(9):886-889.