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