基于SoPC的視頻跟蹤系統中OSD功能的實(shí)現
OSD(On Screen Display)是指將系統的參數和狀態(tài)信息在屏幕上顯示出來(lái),在電視機、錄像機等家電產(chǎn)品中這種技術(shù)早已廣泛應用。視頻跟蹤系統要求進(jìn)行數字、符號、跟蹤窗的實(shí)時(shí)顯示,即具有OSD功能,包括無(wú)視頻輸入指示、鎖定指示、跟蹤狀態(tài)和性能指示、顯示脫靶量數據及其他操作參數等。
OSD的實(shí)現方法基本上有三種:使用專(zhuān)用OSD器件;選用支持OSD功能的處理器;采用PLD。在實(shí)時(shí)性要求較高的視頻跟蹤系統中,需要使用大規模FPGA進(jìn)行并行圖像處理,并且在FPGA中實(shí)現SoPC設計,同時(shí)應能減小系統的體積和成本。如果只選用專(zhuān)用OSD器件或帶有OSD功能的處理器反而會(huì )增加系統硬件設計的復雜度,降低系統的可靠性。因此,有必要采用與SoPC系統相結合的OSD實(shí)現方案。
1 視頻跟蹤系統
基于SoPC技術(shù)的視頻跟蹤系統框圖如圖1所示。系統采用Altera公司的Stratix 系列FPGA及Nios Ⅱ軟核處理器實(shí)現SoPC設計,將圖像處理、目標識別與跟蹤等協(xié)處理單元掛在Nios Ⅱ處理器上,并通過(guò)SPI、I2C等IP-Core實(shí)現對操縱桿、視頻編解碼器等設備的控制。系統支持PAL-D(576i25)標準輸入輸出。
2 OSD實(shí)現方案
2.1 SoPC系統的配置結構
在SoPC系統中,實(shí)現OSD功能要與如圖2所示的SoPC系統的配置結構相結合,系統采用Altera公司的MAX-II器件作為配置控制器,在系統啟動(dòng)(boot)時(shí)負責將FPGA的配置數據從外部Flash Memory傳送到Stratix中。這里將OSD字符/圖形庫以只讀數據的形式存放在外部CFI-Flash中,CFI-Flash同時(shí)裝有FPGA的配置數據和軟件程序,配置結束后MAX-Ⅱ需要將連接CFI-Flash的全部總線(xiàn)置為‘Z’,這樣Nios Ⅱ處理器才能夠獲得CFI-Flash的總線(xiàn)使用權,以讀取程序和OSD數據。
2.2 OSD實(shí)現結構
OSD實(shí)現框圖如圖3所示。這里采用了FPGA中的一個(gè)M-RAM作為OSD緩存,其中每位與視頻中的一個(gè)像素映射。因PAL-D復合視頻信號為隔行掃描,因此,OSD緩存中的數據按奇/偶場(chǎng)方式存放,每場(chǎng)占用720×288/8=25 920B,M-RAM大小為64KB,可實(shí)現全視場(chǎng)范圍的單色OSD映射。OSD緩存被定義為雙口方式,輸出與視頻數據流同步。
OSD緩存的數據位寬可定義為2n(n=0,1,…),但應該注意:數據位寬選得越大,NiosⅡ處理器的訪(fǎng)問(wèn)速度就越快,而OSD的水平方向定位也越復雜;數據位寬選得越小,水平方向定位越精確,但訪(fǎng)問(wèn)速度也會(huì )越慢,且實(shí)時(shí)性差。因此,進(jìn)行折衷處理,選擇lpm_width=8。
M-RAM的讀地址要根據行、場(chǎng)同步信號生成,圖像原始分辨率為864×625,則水平計數器Cnt_Hor和垂直計數器Cnt_Ver為10bit寬,Cnt_Hor的異步清零端接脈沖化后的行同步信號HSYNC,Cnt_Ver的異步清零端接脈沖化后的場(chǎng)同步信號VSYNC。在有效圖像分辨率為720×576范圍內,使能地址計數器Cnt_Rd_Addr、Cnt_Rd_Addr的計數時(shí)鐘為像素時(shí)鐘的8分頻,即每8個(gè)像素時(shí)鐘讀取一個(gè)數據,Cnt_Rd_Addr的異步清零端接脈沖化后的場(chǎng)同步信號VSYNC。
OSD緩存讀地址生成邏輯如圖4所示。圖中,1.6875MHz時(shí)鐘脈沖化后接74165的STLD(并行數據加載信號),每隔8個(gè)像素時(shí)鐘載入一個(gè)字節的OSD數據并串行輸出。圖5為最簡(jiǎn)單的OSD合成邏輯,圖中,bit→piexl的映射邏輯用一個(gè)8位并-串轉換器74165實(shí)現,使用兩個(gè)8bit的Mux2_1,如果ctrl_bit等于‘0’,則YCbCr輸出原圖像數據;如果ctrl_bit等于‘1’,則Y輸出0xEB,CbCr輸出0x10。
2.3 OSD API
OSD API的實(shí)現包括:創(chuàng )建API硬件接口;建立字符/圖形庫;OSD顯示驅動(dòng)函數(包括字節重構、字符顯示、圖形顯示、消隱等)。
API硬件接口可以通過(guò)SoPCBuilder建立,包括16位地址OSD_ADDR、8位數據OSD_DATA、寫(xiě)使能OSD_WEN和OSD緩存的異步清零信號OSD_ACLR。由于M-RAM不能設置初始數據,因此上電后首先將OSD_ACLR置位,然后對OSD緩存初始化后,再將OSD_ACLR置零,以免開(kāi)機時(shí)系統出現花屏現象。
字符/圖形庫可以通過(guò)字模提取軟件得到,并定義到unsigned char const型數組中。打開(kāi)Nios Ⅱ IDE中的System Library Properties窗口,將read-only data memory(.rodata)項設為ext_flash,即將OSD庫放在外部的CFI-Flash中。
OSD數據寫(xiě)入緩存時(shí)要注意兩個(gè)關(guān)鍵問(wèn)題,一是垂直方向上的隔行處理,即按照奇偶場(chǎng)規則寫(xiě)入緩存;二是水平方向上的字節拆分與重構,因為OSD緩存是整字節(8bit)訪(fǎng)問(wèn)的,為了實(shí)現字符/圖形的像素級定位,該操作是必要的。例如,為了在位置3開(kāi)始疊加如圖6所示的11個(gè)bit‘1’,需要補5個(gè)bit的‘0’,并將重構后的“0x3f、0xf8”寫(xiě)入OSD緩存,該操作由軟件完成。
3 結果與結論
OSD實(shí)現效果如圖7所示,監視器上疊加有字符、數字和圖形,如果進(jìn)一步設計,還可以實(shí)現彩色OSD、畫(huà)中畫(huà)以及透明效果,本文只是對這一方案進(jìn)行了初步驗證。
實(shí)際應用證明,本文提出的設計方案新穎、合理,能夠有效減小視頻跟蹤系統的體積、降低系統復雜度和成本,具有極大的實(shí)用價(jià)值。
評論