熊 璟 ,劉 怡 ,唐 廣 ,黃自力
(1.電子科技大學(xué) 電子工程學(xué)院,四川 成都 610054;2.西南技術(shù)物理研究所,四川 成都 610041)
責(zé)任編輯:任健男
視頻字符疊加就是通過(guò)一定電路產(chǎn)生字符或時(shí)間信號(hào)并與輸入的視頻信號(hào)進(jìn)行疊加,使字符或時(shí)間在監(jiān)示器的指定位置上與圖像信號(hào)同時(shí)顯示。用FPGA實(shí)現(xiàn)數(shù)字視頻字符疊加不僅簡(jiǎn)化了電路結(jié)構(gòu),而且在現(xiàn)有成本的前提下充分利用了FPGA的資源[1]。它采用了參數(shù)化、模塊化的設(shè)計(jì)方式,因此顯示穩(wěn)定;在顯示格式、內(nèi)容變動(dòng)時(shí)容易修改。
Nios II是Altera公司開發(fā)的第二代可進(jìn)行SoPC設(shè)計(jì)的RISC型處理器軟核,具有高性能、參數(shù)可配置、可移植、可裁剪等特點(diǎn),并且具有很高的靈活性、實(shí)用性,更能滿足設(shè)計(jì)的要求。Nios II處理器可以通過(guò)AVALON接口采用“基地址+地址偏移量”的方式來(lái)訪問(wèn)某寄存器,從而實(shí)現(xiàn)對(duì)這個(gè)系統(tǒng)的控制。
筆者提出了一種基于Nios II的視頻字符疊加實(shí)現(xiàn)的新方案,在Altera公司的Cyclone III系列的EP3C40F484I7器件上完成了硬件驗(yàn)證,用Nios II來(lái)替代串口的功能,給FPGA發(fā)送指令或數(shù)據(jù)以方便功能調(diào)試。該設(shè)計(jì)結(jié)合ADSP-BF561芯片,應(yīng)用到某視頻監(jiān)控系統(tǒng)中。
采用模塊化進(jìn)行設(shè)計(jì),整個(gè)設(shè)計(jì)分為圖像顯示模塊(包含視頻字符疊加模塊、圖像十字中心線及波門跟蹤框顯示模塊、ROM字符庫(kù)生成等功能模塊)、ADV7179和ADV7180的I2C實(shí)現(xiàn)、Nios II控制模塊、時(shí)鐘生成模塊等幾部分。其中,ADV7180是ADI公司生產(chǎn)的一款多格式SDTV解碼芯片,可以支持包括NTSC,PAL以及SECAM電視格式,并將其轉(zhuǎn)換為符合CCIR6564∶2∶2格式的視頻數(shù)據(jù),其并行數(shù)據(jù)輸出與ADSP-BF561的PPI口通過(guò)2個(gè)通用I/O口采用I2C方式相連,接口電路簡(jiǎn)單,不需要外圍器件,節(jié)省成本,增加了電路的可靠性。ADV7179是與視頻解碼芯片ADV7180相配套的單芯片PAL/NTSC視頻編碼芯片,用于ITU-RI BT601/BT656 YCrCb到PAL/NTSC的視頻編碼,采用3.3 V或2.8 V供電,可通過(guò)其接口I2C對(duì)芯片內(nèi)部電路進(jìn)行控制,并且每個(gè)DAC可以單獨(dú)關(guān)閉,功耗極低,可以保證視頻采集的質(zhì)量和流暢性。ADV7180將模擬視頻信號(hào)經(jīng)處理后(8 bit)輸出 720×576 的標(biāo)準(zhǔn) CCIR6564∶2∶2數(shù)字信號(hào),并產(chǎn)生相應(yīng)的行、場(chǎng)同步信號(hào)HS和VS,以及與HS鎖定的時(shí)鐘信號(hào)LLC和LLC2。系統(tǒng)框圖如圖1所示。
本設(shè)計(jì)采用的圖像分辨力是720×576,圖像采用隔行掃描方式。顯示界面上所有字符字體為WST_Czec,字號(hào)為6號(hào),大小為16×16。波門跟蹤框和十字在圖像上初始位置為360×288,波門跟蹤框大小為128×128,小十字大小為32×32,大十字大小為200×200。顯示界面如圖2所示。
圖像顯示模塊的主要作用是利用視頻行同步信號(hào),在特定位置從FPGA的ROM中讀出待疊加字符的信息,與視頻信號(hào)疊加,產(chǎn)生有字符的視頻信號(hào)。
對(duì)ADV7179和ADV7180的控制和I2C的實(shí)現(xiàn),以及字符疊加功能的實(shí)現(xiàn)用Verilog編程實(shí)現(xiàn)。整個(gè)字符疊加功能的實(shí)現(xiàn)包括行/列計(jì)數(shù)器的生成、字符位置的確定、字符庫(kù)的建立、查找地址、字符塊顯示模塊、顯示狀態(tài)模塊等。其中,行/列計(jì)數(shù)器由行/場(chǎng)信號(hào)決定;字符的位置由字符點(diǎn)陣大小、行/場(chǎng)信號(hào)和用戶需求決定,圖像中心十字線固定在圖像中心位置,波門跟蹤框位置由用戶指令和跟蹤坐標(biāo)決定,參考圖2的顯示界面,本設(shè)計(jì)的特點(diǎn)是可以在視頻的任意位置疊加字符和圖像,內(nèi)容變動(dòng)時(shí)容易修改;由用戶所給指令決定在某指令下各個(gè)字符和圖像的顯示或消隱,如果用戶給出跟蹤狀態(tài)指令時(shí)要求不顯示圖像中心十字線、顯示波門跟蹤框和跟蹤坐標(biāo)及相應(yīng)狀態(tài)字符,就將圖像中心十字線輸出為輸入視頻信號(hào),而其他待顯示內(nèi)容的相應(yīng)位置為0xff時(shí),就將其在圖像上顯示出來(lái),其他位置則在圖像上輸出輸入視頻信號(hào)。
字符由16×8個(gè)像素構(gòu)成,字符中的一個(gè)點(diǎn)對(duì)應(yīng)顯示屏的一個(gè)像素,由于本設(shè)計(jì)的圖像掃描是隔行掃描方式,所以這樣一個(gè)字符在屏幕上就是16×16個(gè)像素的陣列。因此,在屏幕上疊加字符就是把相應(yīng)的像素疊加到指定的位置。本設(shè)計(jì)利用字模生成工具suki_v5.0來(lái)構(gòu)造各個(gè)16×8點(diǎn)陣字符,以字母X為例,其中黑點(diǎn)代表二進(jìn)制中的“1”,白點(diǎn)代表“0”,如圖 3所示。用 16 bit表示該字符即為 0x0C18,0x0630,0x0360,0x01C0,0x01C0,0x0360,0x0630,0x0C18。
將各個(gè)字符用字模生成工具構(gòu)造,在Quartus II的環(huán)境下,調(diào)用一個(gè)大小為16 bit×256 words ROM IP核,并建立一個(gè)字符庫(kù)的.mif存儲(chǔ)文件用來(lái)存放各個(gè)字符的數(shù)據(jù),如圖4所示。
由于字符的點(diǎn)陣值反映的是屏幕上被二值化后的某一點(diǎn)是亮還是暗的信息,而顯示時(shí)需要的數(shù)據(jù)是某點(diǎn)的灰度級(jí)數(shù),所以從字符里讀出的每1 bit均需轉(zhuǎn)化成0x00或0xff。每個(gè)字符的信息在顯示時(shí)是一行一行讀取的,并且視頻信號(hào)的掃描方式是隔行掃描。每場(chǎng)圖像在要疊加字符的行從ROM中讀取字符信息,疊加允許位置為“1”,ROM中的數(shù)據(jù)為“0”,則直接輸出視頻信號(hào);ROM中的數(shù)據(jù)為“1”,則輸出相關(guān)的顏色信號(hào)。疊加允許位置為“0”,不讀取ROM中的數(shù)據(jù),直接輸出視頻信號(hào)[2]。這種方法的優(yōu)點(diǎn)是各個(gè)字符是并行調(diào)用ROM,速度快,但占用ROM資源多;如果資源有限,且對(duì)其速度沒(méi)有特別要求,可以采用以速度換面積的思想,用一個(gè)多路選擇器,將所有要實(shí)現(xiàn)的字符的地址、位置作為選擇條件,只調(diào)用一次ROM,面積減少了,但會(huì)增加一些復(fù)雜的組合邏輯,降低系統(tǒng)的工作頻率。其主要思路是:基于每個(gè)字符顯示位置的固定性及每個(gè)字符顯示大小的固定和同一性,行列時(shí)鐘計(jì)數(shù)器在某一范圍便是某一字符的有效域,從而賦予某一值以確定讀取的是第幾個(gè)字符的點(diǎn)陣信息[3]。
另外,如果字符是數(shù)字,比如是4位十進(jìn)制數(shù)abcd,而字符庫(kù)里只存有0~9這10個(gè)數(shù)字,對(duì)其按式(1)進(jìn)行一些簡(jiǎn)單的處理即可
如果是4位十六進(jìn)制數(shù),只須將其依次移位,或用d={4’b0,abcd[3:0]}描述即可實(shí)現(xiàn)每一位,并在ROM上找到每一位對(duì)應(yīng)的地址。本設(shè)計(jì)為了方便查找地址,分別用0~9查找字符0~9的地址, 用a~f查找字符 a~f的地址,其他字符依次排序。
本設(shè)計(jì)采用的視頻ADV7180_P輸入數(shù)據(jù)信號(hào)是16 bit,但有效信號(hào)是8 bit,故將其有效位引出轉(zhuǎn)換為8 bit數(shù)據(jù)信號(hào) ADV7180_TEM,即 ADV7180_TEM={ADV7180_P[15:9],ADV7180_P[7]},輸出視頻數(shù)據(jù)信號(hào)ADV7179_P也是8 bit。本設(shè)計(jì)選用或(OR)門來(lái)實(shí)現(xiàn)視頻數(shù)據(jù)輸出,而不用IF-ELSE風(fēng)格。因?yàn)檫x用后者在符合某行某列或是某區(qū)域時(shí)將此字符顯示出來(lái),會(huì)使有些字符或圖像重疊。而使用或門就可以簡(jiǎn)單地解決這一問(wèn)題,并使程序顯得簡(jiǎn)潔不冗長(zhǎng)。程序如下:
本設(shè)計(jì)利用Nios II的靈活性,將視頻疊加字符模塊中由用戶給出的指令和參數(shù)引出來(lái),在SoPC Builder[4]生成一個(gè)Nios II processor,并且添加On_chip_ram和PIO等模塊,設(shè)置參數(shù),并在工程頂層文件實(shí)例化所生成的CPU核,完成相當(dāng)于與DSP通信的串口工作,這樣就可以跳過(guò)DSP程序直接完成FPGA視頻字符疊加的功能實(shí)現(xiàn),方便又快捷。原本應(yīng)由DSP在某約定地址寫給FPGA的數(shù)據(jù)包括x,y坐標(biāo),狀態(tài)信息,命令和顯示狀態(tài)等,現(xiàn)在均可在Nios II 8.1 IDE的編譯環(huán)境中通過(guò)編寫程序直接給PIO口定義的變量賦值實(shí)現(xiàn)。代碼如下:
搭建調(diào)試平臺(tái),連接攝像機(jī)、硬件電路板和監(jiān)視器(顯示屏幕)等,將程序下載到FPGA中,在線調(diào)試字符疊加功能,通過(guò)監(jiān)視器屏幕可以看到對(duì)應(yīng)當(dāng)前狀態(tài)的視頻圖像和字符顯示。
筆者設(shè)計(jì)了一種視頻字符疊加模塊,并成功地基于Nios II對(duì)其進(jìn)行控制、調(diào)試。設(shè)計(jì)中增加了電路的面積,但避免了復(fù)雜的組合邏輯,提高了系統(tǒng)的工作效率。
[1]孫漲波,顧紅,蘇為民.視頻字符疊加技術(shù)的發(fā)展及四種實(shí)現(xiàn)方案[J]. 電子技術(shù)應(yīng)用,2001(11):44-46.
[2]宋承杰,王景存.基于FPGA的視頻字符疊加的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2009,33(12):24-27.
[3]劉桂芬,張長(zhǎng)明,高升久,等.基于FPGA的視頻字符疊加設(shè)計(jì)及其實(shí)現(xiàn)[J]. 國(guó)外電子元器件,2005(11):7-10.
[4]周立功.SoPC嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2006.