基于DVI和FPGA的視頻疊加器設(shè)計(jì)
摘 要: 利用FPGA作為主控單元,以數(shù)字視頻接口DVI為視頻接口、TI公司的TFP401和TFP410為視頻信號(hào)的編解碼芯片、ISSI公司的SRAM IS61LV10248-8TI為存儲(chǔ)單元完成視頻疊加器的設(shè)計(jì)。通過該系統(tǒng),從路圖像的非黑像素能夠覆蓋主路圖像相同坐標(biāo)的像素。
關(guān)鍵詞: 數(shù)字視頻疊加;FPGA;最小化傳輸差分信號(hào)
飛機(jī)研發(fā)過程中,需要對(duì)包含目標(biāo)信息和地圖信息的機(jī)載視頻信號(hào)進(jìn)行調(diào)試。但是機(jī)載顯示終端普遍存在價(jià)格昂貴、使用壽命短等缺點(diǎn),如果使用它不斷地調(diào)試機(jī)載視頻信號(hào),則機(jī)載顯示終端的消耗會(huì)增大,研發(fā)成本將大幅提高。
本文介紹了一種DVI視頻信號(hào)疊加器的設(shè)計(jì)方案,可以對(duì)兩組相同分辨率和刷新頻率的DVI視頻信號(hào)轉(zhuǎn)化、合成并輸出。通過該系統(tǒng),從路圖像的非黑像素能夠覆蓋主路圖像相同坐標(biāo)的像素,從而完成對(duì)機(jī)載顯示終端的模擬。該方案主要以1024×768@60Hz的視頻源為研究對(duì)象,可根據(jù)實(shí)際需要調(diào)節(jié),并可支持多種分辨率和刷新頻率(640×480@60Hz,800×600@60Hz,1024×768@60Hz)。
由于設(shè)計(jì)了這種模擬裝置,因此不必用機(jī)載顯示終端調(diào)試機(jī)載視頻信號(hào),從而減少對(duì)機(jī)載顯示終端的消耗。DVI視頻信號(hào)疊加器的使用,節(jié)約了開發(fā)成本。
1 DVI接口
數(shù)字視頻接口(DVI)是一種適應(yīng)數(shù)字顯示器飛速發(fā)展而產(chǎn)生的顯示接口。DVI 標(biāo)準(zhǔn)由 DDWG(Digital Display Working Group)于1999年4月正式推出,該組織包括了Intel、IBM、HP、Silicon Image、NEC等眾多芯片及整機(jī)的生產(chǎn)廠家,因而 DVI 標(biāo)準(zhǔn)具有廣泛的業(yè)界支持[1]。DVI的接口主要有兩種類型:DVI-Digital(DVI-D),只支持?jǐn)?shù)字式顯示器,共 24 個(gè) 引 腳;DVI-Integrated(DVI-I),兼容模擬和數(shù)字的連接,共29個(gè)引腳。計(jì)算機(jī)顯卡一般有DVI-I和VGA兩個(gè)接口。本設(shè)計(jì)選用的是 DVI-I 接口,相對(duì)于VGA(Video Graphics Array)接口,其優(yōu)勢(shì)突出,DVI傳輸?shù)氖菙?shù)字信號(hào),數(shù)字圖像信息不需經(jīng)過數(shù)字→模擬→數(shù)字繁瑣的轉(zhuǎn)換過程,就會(huì)直接被傳送到顯示設(shè)備上,大大節(jié)省了時(shí)間,因此它的速度更快,能有效消除拖影現(xiàn)象。而且VGA模擬信號(hào)易受干擾,DVI信號(hào)則抗干擾能力強(qiáng),圖像信號(hào)沒有衰減,色彩更純凈、逼真。
2 VESA標(biāo)準(zhǔn)介紹
VESA(Video Electronics Standards Association)即視頻電子標(biāo)準(zhǔn)協(xié)會(huì),主要致力于制訂并推廣顯示相關(guān)標(biāo)準(zhǔn)。它規(guī)定了各種分辨率和刷新頻率的顯示監(jiān)視器定時(shí)標(biāo)準(zhǔn)(簡(jiǎn)稱VESA標(biāo)準(zhǔn))。
2.1 VESA標(biāo)準(zhǔn)時(shí)序圖與參數(shù)定義
從圖 1可以看出[2],VESA標(biāo)準(zhǔn)包括場(chǎng)同步(VSYNC)、行同步(HSYNC)、像素?cái)?shù)據(jù)有效(DE)、像素時(shí)鐘(CLK)、像素?cái)?shù)據(jù)(Data,一般為24 bit)五組信號(hào)。
VESA標(biāo)準(zhǔn)的五組視頻信號(hào)之間有嚴(yán)格的定時(shí)參數(shù),場(chǎng)(行)掃描包括場(chǎng)(行)消隱期和場(chǎng)(行)有效顯示期(即Addr Time)。場(chǎng)(行)消隱期又包括同步期(Sync)、后肩(Back Porch)、頂(左)邊(Top (Left)Border)、底(右)邊(Bottom (Right)Border)、前肩(Front Porch)。圖 1以行同步極性和場(chǎng)同步極性都是負(fù)極性為例,即同步期為低電平[2]。關(guān)于同步極性的規(guī)定(如在1 024×768@60Hz的視頻格式下),如圖2中“Hor Sync Polarity=NEGATIVE”,“Ver Sync Polarity= NEGATIVE”所示。
2.2 VESA參數(shù)值舉例(1 024×768@60Hz)
VESA同樣規(guī)定了各種參數(shù)在不同分辨率和刷新頻率的具體值,例如1 024×768@60Hz的定時(shí)參數(shù)值如圖2所示[2]。結(jié)合圖 1與圖2便可容易地用VHDL語言生成1 024×768@60Hz的時(shí)序信號(hào)。
3 系統(tǒng)框圖
系統(tǒng)總體框圖如圖 3所示,大致可分為五個(gè)部分:DVI接口、DVI解碼電路、FPGA主控制器及存儲(chǔ)器電路、DVI編碼電路。本設(shè)計(jì)只選取了兩路綠色數(shù)據(jù)輸入信號(hào)進(jìn)行處理,故以下的像素?cái)?shù)據(jù)信號(hào)(Data)無特殊說明都是綠色的8位信號(hào)。
連接DVI接口的計(jì)算機(jī)顯卡,通過DDC[3,4]接口讀取存儲(chǔ)在EEPROM中的EDID[3]數(shù)據(jù),在通信握手成功后,向DVI接口發(fā)出T.M.D.S視頻信號(hào)。DVI接口傳輸?shù)腡.M.D.S時(shí)序碼流,經(jīng)過T.M.D.S解碼電路可以被解碼為VESA標(biāo)準(zhǔn)的數(shù)字視頻信號(hào)。SRAM1(SRAM3)與SRAM2(SRAM4)構(gòu)成VESA1(VESA2)鏈路的一組乒乓RAM,輪流存儲(chǔ)VESA1(VESA2)鏈路的像素?cái)?shù)據(jù)。FPGA讀取已存儲(chǔ)的像素?cái)?shù)據(jù)進(jìn)行疊加操作并產(chǎn)生VESA標(biāo)準(zhǔn)的視頻信號(hào),然后通過VESA3鏈路發(fā)送到T.M.D.S編碼電路。T.M.D.S編碼電路將VESA3鏈路的VESA標(biāo)準(zhǔn)的信號(hào)編碼成T.M.D.S時(shí)序碼流,最后將其傳送到DVI接口,供顯示器顯示。引入乒乓RAM是由于即使兩路VESA視頻信號(hào)分辨率和刷新頻率相同,兩者一般也存在非零的相位差,所以需要存儲(chǔ)器對(duì)它們的像素?cái)?shù)據(jù)進(jìn)行存儲(chǔ)。
T.M.D.S解碼電路的解碼芯片采用TFP401,T.M.D.S編碼電路的編碼芯片采用TFP410。SRAM選用IS61LV-
10248-8TI,其讀寫周期為8 ns,存儲(chǔ)空間為1 M×8 bit,能夠滿足系統(tǒng)像素時(shí)鐘最高為65 MHz、最高分辨率為1024×768的要求。
4 工作流程
FPGA內(nèi)部工作模塊如圖4所示。下面簡(jiǎn)要闡述關(guān)鍵信號(hào)的數(shù)據(jù)流向。
場(chǎng)同步極性判斷模塊的功能是根據(jù)輸入的VESA1信號(hào)判斷出場(chǎng)同步極性(VSP),因VESA1和VESA2視頻格式相同,只需判斷VESA1的場(chǎng)同步極性。VESA1(VESA2)寫地址生成模塊的功能是利用場(chǎng)同步極性實(shí)現(xiàn)寫地址和像素位置的合理對(duì)應(yīng)。輸出時(shí)序、寫地址生成模塊的功能是利用場(chǎng)同步極性、VESA1寫地址生成模塊生成的寫地址a_write1和VESA1中的場(chǎng)同步信號(hào),實(shí)現(xiàn)分辨率的判斷,進(jìn)而結(jié)合其他信號(hào)完成輸出時(shí)序的生成和讀地址的生成。SRAM控制模塊負(fù)責(zé)根據(jù)上述生成的讀地址和寫地址,寫入兩路VESA信號(hào)的新的像素?cái)?shù)據(jù),讀出先前存儲(chǔ)的兩路VESA信號(hào)像素?cái)?shù)據(jù)。被讀出的兩個(gè)像素點(diǎn)將用于輸出時(shí)序、寫地址生成模塊的像素疊加操作,產(chǎn)生的像素作為輸出像素。
4.1 場(chǎng)同步極性(Ver Sync Polarity)判斷
由于DE1=1期間,VSYNC1信號(hào)必然處于非同步期,此時(shí)的電平與同步期相反。所以,在DE1=1時(shí),若VSYNC1=1,則記為VSP=0(Ver Sync Polarity=NEGATIVE),否則,記為VSP=1(Ver Sync Polarity=POSITIVE)。在實(shí)現(xiàn)該模塊的編程中,采用VESA1視頻信號(hào)中的CLK1像素時(shí)鐘信號(hào)上升沿來同步此進(jìn)程,可以保證產(chǎn)生的信號(hào)穩(wěn)定。
4.2 VESA1和VESA2寫地址生成
因?yàn)閂ESA1寫地址生成與VESA2寫地址生成類似,這里只介紹VESA1的寫地址(a_write1)生成。由于系統(tǒng)中SRAM的地址總線為20位(尋址能力1M),所以a_write1為20位。若將輸入視頻信號(hào)的分辨率記為def,則VESA1一幀像素?cái)?shù)據(jù)所需SRAM空間范圍是0~def-1。因此,在場(chǎng)同步期間(VSYNC1=VSP),可令a_write1=220-1。在非場(chǎng)同步期間,若處于像素?cái)?shù)據(jù)有效期(DE1=1),則當(dāng)像素時(shí)鐘(CLK1)上升沿到來時(shí),對(duì)a_write1實(shí)行自加一操作(假設(shè)已設(shè)置T.M.D.S解碼器1輸出的控制信號(hào)及像素?cái)?shù)據(jù)在CLK1的上升沿前后穩(wěn)定);若處于像素?cái)?shù)據(jù)無效期(DE1≠0),則a_write1保持不變。這樣,在一幀圖像期間,對(duì)應(yīng)從圖像左上角開始計(jì)數(shù)的每個(gè)像素?cái)?shù)據(jù),便可形成0~def-1的地址范圍。
4.3 輸出時(shí)序、讀地址生成
4.3.1 分辨率判斷
a_write1(VESA1寫地址)的范圍是0~def-1,而a_write1完成從def-1到0跳變的觸發(fā)源正是場(chǎng)同步信號(hào)(VSYNC1)從非同步期到同步期的跳變。因此,可定義一信號(hào)def_clk,當(dāng)VSYNC1≠VSP時(shí),def_clk=0,否則,def_clk=1。這樣,當(dāng)def_clk上升沿到來時(shí),正是場(chǎng)同步信號(hào)從非同步期到同步期的跳變,此時(shí)若令20位信號(hào)def_1= a_write1(等于def-1),且令def=def_1+1,則可得真正的分辨率,。
4.3.2 暫時(shí)輸出時(shí)序控制信號(hào)生成
VESA標(biāo)準(zhǔn)的控制信號(hào)包括VSYNC、HSYNC、DE。由于已知兩路視頻信號(hào)的分辨率(def),這時(shí)將VESA1的像素時(shí)鐘(CLK1)作為暫時(shí)的輸出時(shí)序像素時(shí)鐘(CLK33),再結(jié)合VESA標(biāo)準(zhǔn)的介紹,便可生成分辨為def的暫時(shí)的輸出時(shí)序控制信號(hào)VSYNC33、HSYNC33、DE33。
4.3.3 VESA3讀地址生成
由于此地址生成方法與VESA1和VESA2寫地址生成方法相同,只是此處生成的地址是SRAM控制器用來讀取像素?cái)?shù)據(jù)而已,故不再贅述。
4.3.4 換場(chǎng)信號(hào)生成
當(dāng)主時(shí)序換場(chǎng)時(shí),每一路視頻信號(hào)的兩片SRAM需要交換讀寫方式,即若換場(chǎng)前讀SRAM1、SRAM3,寫SRAM2、SRAM4,則換場(chǎng)后讀SRAM2、SRAM4,寫SRAM1、SRAM3。因此需要一個(gè)信號(hào)在主時(shí)序相鄰兩場(chǎng)的電平不同,即換場(chǎng)信號(hào),記為v_trans。此信號(hào)用來控制圖 4中SRAM控制模塊的讀寫方式。
v_trans的生成方式比較簡(jiǎn)單,只需在VSYNC33的上升沿到來時(shí)將v_trans取反即可。
4.3.5 輸出時(shí)序同步處理和疊加像素生成
由于信號(hào)在FPGA生成的電路存在延遲,主時(shí)序控制信號(hào)和像素時(shí)鐘信號(hào)可能產(chǎn)生不同步現(xiàn)象。因此需要對(duì)控制信號(hào)進(jìn)行同步處理,同步期間同時(shí)生成像素?cái)?shù)據(jù)Data3(VESA3像素?cái)?shù)據(jù))并輸出。VESA3中的像素時(shí)鐘直接短接CLK33即可。Data11(Data22)是從SRAM中讀取的VESA1(VESA2)鏈路像素?cái)?shù)據(jù)。
同步過程為CLK33下降沿到來時(shí)輸出控制信號(hào)和像素?cái)?shù)據(jù)。由于本文將VESA1作為主路、VESA2作為從路,所以要將VESA2信號(hào)疊加在VESA1上。疊加算法為:若VESA2第i個(gè)像素點(diǎn)(Data22)為黑色(Data22=0),則輸出的VESA3第i個(gè)像素為VESA1的第i個(gè)像素(Data11),即Data3=Data11;否則,輸出的VESA3第i個(gè)像素為VESA2的第i個(gè)像素,即Data3=Data22。
4.4 SRAM控制
將SRAM1和SRAM2分為一組,對(duì)應(yīng)VESA1鏈路;將SRAM3和SRAM4分為一組,對(duì)應(yīng)VESA2鏈路。SRAM控制模塊需要對(duì)每一組中的兩塊SRAM輪流進(jìn)行讀寫操作。若v_trans=0,則用VESA3讀地址生成模塊產(chǎn)生的地址a_read來讀取SRAM1、SRAM3,分別得像素?cái)?shù)據(jù)Data11、Data22,同時(shí)用VESA1、VESA2寫地址生成模塊產(chǎn)生的地址a_write1、a_write2分別將Data1、Data2寫入SRAM2、SRAM4;否則,用地址a_read讀取SRAM2、SRAM4,分別得像素?cái)?shù)據(jù)Data11、Data22,同時(shí)用地址a_write1和a_write2分別將Data1和Data2寫入SRAM1、SRAM3。Data11、Data22被送至輸出時(shí)序、讀地址生成模塊進(jìn)行疊加像素生成。
5 實(shí)驗(yàn)結(jié)果
對(duì)于1 024×768@60Hz的VESA時(shí)序,控制信號(hào)(vsync,hsync,de)和像素時(shí)鐘(idck)的仿真結(jié)果如圖 5所示,其他分辨率的仿真圖不再給出。經(jīng)過測(cè)量場(chǎng)同步信號(hào)和行同步信號(hào)的周期分別為16.7 ms、20.7 ?滋s,與VESA標(biāo)準(zhǔn)[2]一致,其他參數(shù)經(jīng)測(cè)量也吻合,不再列舉。
由于只對(duì)兩路視頻中的綠色信號(hào)進(jìn)行了疊加,顯示色數(shù)有些不足。后期研究可向全彩色視頻疊加方向努力。但彩色信號(hào)疊加與綠色信號(hào)疊加在原理上相同,只是意味著要選用引腳數(shù)更多的FPGA。
評(píng)論