《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 解決方案 > 采用FPGA實(shí)現(xiàn)視頻應(yīng)用中的OSD設(shè)計(jì)

采用FPGA實(shí)現(xiàn)視頻應(yīng)用中的OSD設(shè)計(jì)

2011-07-27
作者:李洪帥 北京合眾達(dá)電子技術(shù)有限責(zé)任公司
關(guān)鍵詞: FPGA XC3S250E OSD TMS320DM6?3

 

    近年來,,數(shù)字視頻監(jiān)控系統(tǒng)在銀行、高速公路,、樓宇等各個(gè)領(lǐng)域取得了廣泛的應(yīng)用,。在數(shù)字視頻監(jiān)控系統(tǒng)中,OSD(On Screen Display)技術(shù)是不可或缺的部分,。OSD為用戶提供友好的人機(jī)界面,,能夠使用戶獲得更多的附加信息。
系統(tǒng)構(gòu)成
   本文介紹的系統(tǒng)是基于TI DSP TMS320DM6?3與FPGA的完整視頻監(jiān)控系統(tǒng),,支持1路視頻的輸入和1路視頻輸出,,此外還提供網(wǎng)絡(luò)接口。
 
    視頻輸入采用TI的高性價(jià)比視頻解碼器TVP5150A來實(shí)現(xiàn),,TVP5150A可實(shí)現(xiàn)兩路復(fù)合視頻輸入或一路S-video視頻信號(hào)的采集,。通過I2C進(jìn)行寄存器配置,輸出數(shù)字視頻信號(hào)遵循ITU656標(biāo)準(zhǔn),。
 
    TVP5150A解碼后的數(shù)字視頻信號(hào)通過DM6?3的視頻端口1傳送給DSP,,由DSP進(jìn)行必要的視頻處理,,由網(wǎng)絡(luò)接口輸出給遠(yuǎn)端設(shè)備。另一方面,,DM6?3把從網(wǎng)絡(luò)接收的視頻數(shù)據(jù)處理后,,通過視頻端口2,經(jīng)過FPGA,,由SAA7105顯示輸出,,具體結(jié)構(gòu)如圖1所示。
 
    輸出部分采用SAA7105實(shí)現(xiàn),。SAA7105是NXP公司的一款高性能視頻編碼器,,可提供復(fù)合視頻輸出、VGA視頻輸出以及HDTV高清視頻信號(hào)的輸出,。SAA7105的控制也通過I2C實(shí)現(xiàn),,接收復(fù)合ITU656標(biāo)準(zhǔn)的數(shù)字視頻信號(hào)。
 
    視頻處理部分采用的是TI的DSP TMS320DM6?3來實(shí)現(xiàn),。DM6?3主頻可達(dá)600MHz,,有2個(gè)20位的視頻端口,視頻端口支持BT.656,、Y/C等數(shù)字視頻接口,,DM6?3還集成了網(wǎng)絡(luò)MAC,可實(shí)現(xiàn)網(wǎng)絡(luò)接入,。
 
   硬件性能的發(fā)展速度總是很難滿足軟件的需求,。在視頻處理越來越復(fù)雜的應(yīng)用中,DSP承擔(dān)著繁雜的視頻處理任務(wù),,資源變得非常緊張,,所以在本系統(tǒng)設(shè)計(jì)中,采用了FPGA實(shí)現(xiàn)OSD的設(shè)計(jì),,可以減輕DSP的負(fù)擔(dān),。
 
    OSD實(shí)現(xiàn)部分選用的是賽靈思公司的XC3S250E。XC3S250E是賽靈思SPARTAN-3E系列的FPGA,,有25萬個(gè)邏輯門,。
 
圖1:基于TMS320DM6?3與FPGA的完整視頻監(jiān)控系統(tǒng)架構(gòu)示意圖。
 
OSD實(shí)現(xiàn)
 
    SAA7105無法實(shí)現(xiàn)OSD功能,,而由XC3S250E來實(shí)現(xiàn),。主控芯片DM6?3只需要通知FPGA要顯示的內(nèi)容和位置,具體的工作由FPGA執(zhí)行,。OSD的邏輯框圖如圖2所示,。
 
圖2:OSD功能框圖。
 
    OSD FPGA通過EMIFA從DSP DM6?3接收OSD數(shù)據(jù)和控制指令,通過DSP的視頻端口1接收視頻數(shù)據(jù),,并將OSD的信息疊加到視頻數(shù)據(jù)上,,輸出給視頻編碼器SAA7105。OSD的各功能模塊描述如下,。
 
   地址譯碼模塊的數(shù)據(jù)端口與DSP DM6?3的EMIFA低32位數(shù)據(jù)接口,,接收DM6?3發(fā)出的數(shù)據(jù)與控制信息,這些數(shù)據(jù)和控制信息是DM6?3發(fā)出的原始32位數(shù)據(jù),。地址譯碼模塊將接收到的OSD數(shù)據(jù),,如OSD的內(nèi)容等,以32位數(shù)據(jù)格式放入到FPGA的內(nèi)部FIFO中,。而控制信息主要是通過一組控制寄存器對(duì)OSD實(shí)現(xiàn)控制,。
 
   與DSP直接連接的模塊還有視頻接口模塊。視頻接口模塊與DSP的視頻端口2相連,,存儲(chǔ)來自DSP視頻端口的數(shù)據(jù)與控制信息,。這些控制信息被直接傳輸給OSD多路控制模塊,同時(shí)控制信息也直接控制視頻解碼器SAA7105,。
 
    OSD控制邏輯把從控制寄存器組得到的控制信息輸出到OSD的各個(gè)功能模塊,,實(shí)現(xiàn)對(duì)OSD的控制。寄存器組主要分為兩個(gè)部分:一是異步寄存器組,,向OSD發(fā)送如復(fù)位,、OSD使能和選擇數(shù)據(jù)寬度的控制信息;另一個(gè)是同步寄存器組,,主要控制OSD的位置信息,。
 
    OSD解碼模塊根據(jù)控制邏輯的控制信息,從FIFO中取出要顯示的數(shù)據(jù),,以與視頻數(shù)據(jù)同步的方式輸出到OSD CLUT模塊,。從FIFO中獲得的數(shù)據(jù)是原始的DSP 32位數(shù)據(jù),而OSD CLUT模塊需要的數(shù)據(jù)是8/16位的,,所以O(shè)SD解包模塊需要以一定的規(guī)則將32位數(shù)據(jù)解包,以視頻端口的頻率將32位數(shù)據(jù)以8/16的寬度傳輸給OSD CLUT模塊,。
 
    FIFO模塊的另外一個(gè)功能是向DMA事件發(fā)生器模塊傳遞FIFO的狀態(tài)信息,,如FIFO滿或FIFO空。DMA事件發(fā)生器監(jiān)控這些事件,,如果發(fā)生,,則以中斷的模式發(fā)送給DM6?3,以實(shí)現(xiàn)對(duì)FIFO的正確讀寫操作,。
 
    OSD CLUT模塊為從OSD解包模塊接收的每個(gè)象素的數(shù)據(jù)查找YCbCr的對(duì)應(yīng)值,,并控制這些OSD CLUT數(shù)據(jù)的輸出順序。這種轉(zhuǎn)換關(guān)系是由DSP通過24位的數(shù)據(jù)端口傳送過來的。OSD CLUT模塊的數(shù)據(jù)直接輸出給OSD多路控制器模塊,。
 
    OSD多路控制模塊根據(jù)從OSD CLUT模塊接收到的Alpha控制位確定輸出視頻數(shù)據(jù),,如果當(dāng)前為OSD信息,即Alpha控制位有效,,則輸出OSD數(shù)據(jù)給數(shù)據(jù)轉(zhuǎn)換模塊,。否則,輸出從視頻接口模塊接收的原始視頻數(shù)據(jù),,以此來實(shí)現(xiàn)OSD功能,。
 
OSD多路控制器輸出的數(shù)據(jù)并沒有直接送給視頻解碼器,而是通過數(shù)據(jù)轉(zhuǎn)換模塊,,根據(jù)具體的應(yīng)用條件,,進(jìn)行必要的數(shù)據(jù)格式轉(zhuǎn)換。由SAA7105的接口時(shí)序可知,,當(dāng)SAA7105配置為復(fù)合視頻輸出時(shí),,其要求的數(shù)據(jù)為單時(shí)鐘沿?cái)?shù)據(jù),此時(shí)數(shù)據(jù)轉(zhuǎn)換模塊不作任何工作,,將從OSD多路控制模塊接收的數(shù)據(jù)原封不動(dòng)地傳輸給SAA7105,;如果SAA7105配置為VGA或HDTV輸出模式時(shí),需要雙時(shí)鐘沿?cái)?shù)據(jù),,此時(shí)數(shù)據(jù)轉(zhuǎn)換模塊將從OSD控制器接收到的單時(shí)鐘沿?cái)?shù)據(jù)轉(zhuǎn)換成雙時(shí)鐘沿?cái)?shù)據(jù),,輸出給視頻解碼器SAA7105。
 
    由此可見,,F(xiàn)PGA完成了OSD的所有工作,。如果要顯示OSD內(nèi)容,DM6?3只需要通過EMFIA口向FPGA發(fā)送控制指令即可,,這些指令當(dāng)然包括OSD的內(nèi)容及位置信息,。
 
OSD控制
 
    由XC3S250E實(shí)現(xiàn)的OSD設(shè)計(jì)根據(jù)接收到的OSD位置及內(nèi)容信息進(jìn)行OSD顯示,對(duì)OSD顯示的內(nèi)容沒有任何限制,,非常靈活方便,。下面以O(shè)SD漢字顯示為例說明OSD的控制操作。
 
    要正確的顯示漢字,,就必須將輸入的漢字內(nèi)碼轉(zhuǎn)換成對(duì)應(yīng)的區(qū)位碼,。這一功能我們通過函數(shù)Uint32 Code_Converse(unsigned char *CodeNPointer),其輸入為指針,,指向要轉(zhuǎn)換漢字,。返回值為該漢字對(duì)應(yīng)的區(qū)位碼。OSD的顯示由函數(shù)OSDHZ?isplay實(shí)現(xiàn):
		void OSDHZ_ Display

{

Uint8 *pFrame

Uint32 pitch

OSDUTIL_Point* loc

Uint32 CodeQ

OSDHZ?ont *font

Uint8 fgColor

Uint8 bgColor

}

    其中,,Uint8 *pFrame為OSD輸出的Buffer緩沖區(qū),;Uint32 pitch為每行顯示的象素值,;OSDUTIL_Point *loc為第一個(gè)字符的顯示位置;Uint32 CodeQ為要顯示漢字的區(qū)位碼,;OSDHZ?ont *font為顯示漢字所用的字體,;Uint8 fgColor顯示漢字的前景色;Uint8 bgColor顯示漢字的背景色,。

    所以,,如果需要顯示漢字,只需要將漢字進(jìn)行必要的碼制轉(zhuǎn)換,,然后將轉(zhuǎn)換后的區(qū)位碼,,給出顯示的位置,輸出給OSD FPGA即可,。當(dāng)然要顯示漢字,,漢字字庫(kù)是必不可少的。

作者:

李洪帥

設(shè)計(jì)工程師

北京合眾達(dá)電子技術(shù)有限責(zé)任公司

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。