陳文輝,覃永新,黃慶南
(廣西工學(xué)院 電子信息與控制工程系,柳州 545006)
多路視頻處理技術(shù)是視頻監(jiān)控領(lǐng)域的重要組成部分,其中多路視頻合成系統(tǒng)在安防、指揮、航空等監(jiān)控系統(tǒng)中獲得廣泛應(yīng)用。多路視頻合成系統(tǒng)就是將多路視頻的每一個全畫面按照一定比例縮小后合成為一路視頻信號,然后在高分辨率的顯示設(shè)備上以全屏或多窗口模式顯示[1]。視頻信號處理系統(tǒng)對信號處理速度的要求甚嚴(yán),以往常使用的專用DSP芯片雖然滿足了速度要求,但開發(fā)周期較長,產(chǎn)品的調(diào)試、修改及升級比較困難,成本較高。FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)器件具有并行處理速度高、集成度高、功耗低、設(shè)計靈活等特點,且有快速高效的開發(fā)平臺,可加快開發(fā)周期等優(yōu)勢,使之成為設(shè)計高速視頻信號處理器件的首選。
文中介紹了一種基于FPGA的多路視頻合成系統(tǒng),該系統(tǒng)接收16路由CCD攝像頭采集的模擬視頻信號,通過視頻解碼芯片轉(zhuǎn)換為PAL制式的數(shù)字視頻信號,F(xiàn)PGA對其進行抽取和幀合成等數(shù)據(jù)格式轉(zhuǎn)換,再通過視頻編碼芯片的數(shù)模轉(zhuǎn)換送入VGA顯示器,可顯示1、4、9、16路分割畫面,并通過按鍵輪流切換視頻畫面。
系統(tǒng)以FPGA為核心,與視頻解碼模塊、視頻編碼芯片和SRAM等外圍器件一起構(gòu)成整個多路視頻合成處理系統(tǒng)[2]。FPGA芯片選用ALTERA公司的EP2C15AF484C8;視頻解碼芯片選用SAA7113H作為視頻模數(shù)轉(zhuǎn)換器件;視頻編碼芯片選用SAA7121作為數(shù)模轉(zhuǎn)換器件;片外存儲器SRAM采用IS61LV51216。系統(tǒng)的組成框圖如圖1所示,其中FPGA內(nèi)部的設(shè)計主要包括按鍵控制單元、數(shù)據(jù)采集及提取單元、幀合成處理單元和幀存控制單元。
圖1 多路視頻合成系統(tǒng)組成框圖
圖1中的視頻輸入0~15是來自16路CCD攝像頭的模擬視頻輸入信號,每路經(jīng)由SAA7113H轉(zhuǎn)換成PAL制式ITU656 YUV 4:2:2格式的8位VPO數(shù)據(jù)。上電后,F(xiàn)PGA首先通過IIC總線對視頻解碼器SAA7113H進行配置,接收16路VPO信號進行混合處理,根據(jù)最終顯示窗口與原始圖像大小的比例將其進行有效數(shù)據(jù)的抽取,并按照幀合成原理寫入片外存儲器中,組成一幀圖像的數(shù)據(jù),數(shù)據(jù)存儲地址與屏幕中的像素地址一一對應(yīng),寫滿一幀后讀出,格式再生后送入視頻編碼器SAA7121還原成模擬信號送顯示器輸出。
圖2給出了多路視頻合成系統(tǒng)的內(nèi)部結(jié)構(gòu)圖。
圖2 視頻合成系統(tǒng)的內(nèi)部結(jié)構(gòu)圖
按鍵控制單元用以控制畫面分割數(shù)目的選擇和視頻通道的輪切。其中按鍵N1~N4分別選擇畫面分割數(shù)為1、4、9、16,按鍵NEXT是下一視頻通道的切換鍵。START鍵按下后,默認(rèn)全屏顯示通道0的畫面,輸出Y[15..0]為0001H,之后每次按下NEXT鍵時Y[15..0]循環(huán)左移,切換到下一路視頻數(shù)據(jù);N2、N3、N4鍵按下時,處理過程與此類似。
數(shù)據(jù)采集及提取單元接收16路視頻解碼芯片SAA7113H輸出的VPO信號并提取其中有效像素數(shù)據(jù)。SAA7113H除了輸出數(shù)字視頻信號VPO[7..0],還有相應(yīng)的同步信號:行有效信號RTS0、奇偶場標(biāo)識信號RTS1等。其中RTS0的上升沿表示有效行到來,RTS1的高電平表示奇場,低電平表示偶場[2]。
SAA7113H輸出PAL制式的ITU656標(biāo)準(zhǔn)YUV(4:2:2)格式數(shù)據(jù)[2],其中Y表示亮度信號,而UV表示色差信號,像素時鐘為27MHz。信號掃描方式為隔行掃描,幀率為25幀/秒,每幀圖像分為奇偶兩場,每幀像素為864×625,其中有效像素為720×576。SAA7113H輸出的一行視頻數(shù)據(jù)格式如圖3所示,每行有1728字節(jié),其中有效數(shù)據(jù)1440字節(jié),對應(yīng)720個有效像素,可以看成每一個像素由兩個連續(xù)的字節(jié)表示。
數(shù)據(jù)采集及提取單元由16個數(shù)據(jù)采集通道構(gòu)成,每一通道接收一片SAA7113H的行有效信號RTS0、像素時鐘信號SYS_CLK和8位視頻數(shù)據(jù)VPO[7..0],根據(jù)每一路的輸出允許信號Y[15..0]和畫面數(shù)目按鍵N1~N4,輸出16路經(jīng)過了抽取的有效數(shù)據(jù)VPO_OUT,共128位;以及表示16路視頻通道的有效數(shù)據(jù)信號L[15..0]。
數(shù)據(jù)采集過程:根據(jù)視頻數(shù)據(jù)流的時間參考代碼SAV來獲取有效數(shù)據(jù)的起始時刻。在一幀完整的視頻數(shù)據(jù)中,第一場有效數(shù)據(jù)階段的SAV為“8XH”,而消隱階段的時間參考代碼中的SAV為”AXH”。通過判斷行有效信號RTS0為1時,分析出數(shù)據(jù)流中的“80 10 FF 00 00 SAV”定時參考代碼后,啟動計數(shù)模為1440的計數(shù)器,當(dāng)計數(shù)值為40時置信號L為 1 ,標(biāo)志一行有效數(shù)據(jù)的開始,同時為之后的數(shù)據(jù)處理提供同步信號;當(dāng)計數(shù)值為1320時置L為0,從而結(jié)束一行有效數(shù)據(jù)的采集,在這個時間段內(nèi)就可以截取行中1280個字節(jié)的有效像素數(shù)據(jù)[2]。
數(shù)據(jù)提取過程:當(dāng)按鍵N1有效時不抽取數(shù)據(jù),按照系統(tǒng)時鐘將1280個字節(jié)的數(shù)據(jù)全部送入幀合成單元;當(dāng)按鍵N2、N3、N4有效時,每個通道的數(shù)據(jù)進行1/2、1/3、1/4的抽取,即在每行的L信號為 1的狀態(tài)下分別產(chǎn)生占空比為1/2、1/3和1/4的脈沖作為輸出的選通信號,就有對應(yīng)的視頻數(shù)據(jù)流輸出,然后在幀合成單元的控制下寫入緩存。視頻數(shù)據(jù)進行抽取的示意圖如圖4所示,經(jīng)過抽取后每個視頻通道的數(shù)據(jù)每行640B;類似地,9畫面對應(yīng)每行數(shù)據(jù)426B,16畫面對應(yīng)每行320B。
圖3 ITU一行視頻數(shù)據(jù)格式
圖4 數(shù)據(jù)進行1/2、1/3、1/4、抽取示意圖
系統(tǒng)將視頻畫面分為i的2次冪個子塊,每個子塊按4:3的比例顯示一個視頻畫面。幀合成就是將各個視頻畫面抽取后的數(shù)據(jù)按照幀格式重新合成一幀視頻數(shù)據(jù)。由于每一通道的視頻數(shù)據(jù)流以及行場同步信號各自獨立,幀合成單元必須控制各個通道的壓縮視頻數(shù)據(jù)在數(shù)據(jù)緩存中的讀寫時間,以解決數(shù)據(jù)的同步問題;同時將各路數(shù)據(jù)順序?qū)懭霂鎯ζ髦袑?yīng)的分區(qū)中,從而合并為一幀完整的視頻圖像數(shù)據(jù)。根據(jù)視頻合成的要求,4畫面的每個圖像大小為320×240像素,9畫面為213×160像素,16畫面為160×120像素。
使用的幀合成技術(shù)時涉及到行內(nèi)數(shù)據(jù)的時分復(fù)用過程,即利用每一行經(jīng)過抽取后的數(shù)據(jù)之間的空隙來“加入”另一視頻通道的數(shù)據(jù),從而將2、3或4路信號合為一路視頻數(shù)據(jù)流。圖5中是四畫面幀合成示意圖,通道0和通道1的數(shù)據(jù)流經(jīng)過有效抽取后,分別得到占空比為1/2的數(shù)據(jù)流,控制兩個視頻通道的數(shù)據(jù)的讀取時間,使得通道1的數(shù)據(jù)滯后于通道0的數(shù)據(jù)4個時鐘周期輸出,則通道1的數(shù)據(jù)正好處于通道0的無效數(shù)據(jù)期,這兩個通道的數(shù)據(jù)相互交錯,就可以得到一行復(fù)合視頻數(shù)據(jù)流U0Y0V0Y1U0Y0V0Y1U4Y4V4Y5U4Y4V4Y5…,此復(fù)合視頻行包含2個視頻通道的320個雙字節(jié),共為640個雙字節(jié)。完成行內(nèi)數(shù)據(jù)的時分復(fù)用后,選擇合適的復(fù)合視頻行存儲在片外SRAM中就可以構(gòu)成完整的一幀數(shù)據(jù)。為了均勻地抽取每個畫面的視頻行,須考慮奇偶場的因素,利用奇偶場標(biāo)識端RTS1。在每個視頻通道選擇進行復(fù)合的視頻行的行序號符合以下規(guī)則:
圖5 四畫面幀合成示意圖
設(shè)畫面分割數(shù)為i2,在每一場進行i分之一行的抽?。寒?dāng)i為奇數(shù)時,在RTS1=1時從行0開始抽取,RTS1=0時從行1開始抽??;當(dāng)i為偶數(shù)時,每個視頻畫面只需要在RTS1=1時(奇場)抽取視頻行,4畫面時全取,為240行;16畫面時1/2抽取,為120行。則在視頻編碼芯片輸出一幀數(shù)據(jù)的期間,就可以得到合成畫面的全部視頻通道數(shù)據(jù)。根據(jù)以上原理設(shè)計幀合成單元,其內(nèi)部結(jié)構(gòu)圖如圖6所示,主要由緩沖存儲單元STR_FIFO、讀允許單元FIFO_RD、寫地址產(chǎn)生單元WR_ADD和數(shù)據(jù)選擇器SELECTOR組成。
圖6 幀合成單元內(nèi)部結(jié)構(gòu)圖
2.3.1 緩沖存儲單元STR_FIFO
緩沖存儲單元由16個雙端口先進先出器件LPM_FIFO_DP并聯(lián)構(gòu)成,用于緩存每個視頻通道經(jīng)過有效抽取的視頻數(shù)據(jù)。LPM_FIFO_DP的參數(shù)定制為:寫數(shù)據(jù)位寬=8;讀數(shù)據(jù)位寬=16;數(shù)據(jù)深度=2048;寫時鐘采用系統(tǒng)像素時鐘SYS_CLK,讀時鐘采用像素時鐘的二分頻信號CLK2;寫允許信號端連接數(shù)據(jù)采集單元輸出的數(shù)據(jù)有效信號L[15..0],讀允許信號端連接讀FIFO單元輸出的信號RD[15..0]。
2.3.2 讀FIFO單元FIFO_RD
讀FIFO單元負(fù)責(zé)在每一視頻通道的一行的有效視頻數(shù)據(jù)寫入各自的緩沖FIFO后,通過判斷數(shù)據(jù)有效信號L[15..0]和通道選通端Y[15..0],輸出對16個FIFO的讀允許信號RDOUT[15..0],從而實現(xiàn)一行數(shù)據(jù)的時分復(fù)用。工作過程是:通過判斷數(shù)組Y[15..0]中的高電平位,將輸出的端口分為i組,每組輸出i個高電平選通脈沖組合,每個脈沖相隔2個時鐘信號CLK2,持續(xù)時間為640個CLK2,然后下一組端口依次輸出這樣的脈沖組合,作為每個FIFO的讀允許信號。如:當(dāng)四畫面分割時,若Y=000FH,L=000FH,則選中通道3~0,表示是這四個視頻通道的畫面進行幀合成,且其數(shù)據(jù)已經(jīng)開始寫入這一組的4個緩存FIFO,則可以在RDOUT的最低4位RDOUT[3..0]順序輸出脈沖信號去讀取這4個FIFO。
2.3.3 WR_ADD單元
寫地址單元的任務(wù)是依據(jù)緩沖FIFO輸出的有效數(shù)據(jù),產(chǎn)生對應(yīng)的存儲地址,從而保證數(shù)據(jù)能夠正確寫入與顯示屏上的位置相對應(yīng)的片外SRAM中的存儲單元。按照分割畫面的分區(qū)規(guī)則,將SRAM的存儲空間也劃分為i的2次冪個分區(qū),其存儲地址由高位的列地址和低位的行地址組成。行地址10位,表示一行中前640個單元用于暫存視頻數(shù)據(jù);列地址9位,表示可以暫存480行的數(shù)據(jù);剩余的單元空閑。寫地址單元WR_ADD根據(jù)畫面分割信號EN[3..0],在16個通道的行有效信號L[15..0]有效后,輸出對應(yīng)于不同分割要求的寫SRAM地址。根據(jù)顯示器顯示界面的空間位置來產(chǎn)生寫地址。當(dāng)畫面分割數(shù)i為偶數(shù)時,設(shè)通道序號為j,則寫地址的行地址=M+P*j(M=(0,1,……,640/i-1)),而列地址則是逐一增加。
2.3.4 數(shù)據(jù)選擇器SELECTOR
數(shù)據(jù)選擇器的作用是選擇進行幀合成的i個視頻通道的數(shù)據(jù),同時也調(diào)整時鐘,與寫SRAM的地址同步送入幀存控制單元,從而保證幀合成的準(zhǔn)確性。
幀存控制單元是FPGA芯片與外設(shè)SRAM的接口,從片外SRAM中讀取一幀數(shù)據(jù),將每行數(shù)據(jù)都再生插入:有效視頻行,插入SAV,EAV和行消隱數(shù)據(jù)。再生的數(shù)據(jù)和存儲器中的有效數(shù)據(jù)分時地輸出到視頻編碼芯片,然后輸出到顯示器。為了實現(xiàn)數(shù)據(jù)的連續(xù)處理,設(shè)計中采用了兩片SRAM交替工作,一片SRAM寫入一幀視頻數(shù)據(jù)時,另一片SRAM讀出已經(jīng)完成幀合成的數(shù)據(jù),寫滿或讀空后,交換處理下一幀數(shù)據(jù)。
圖7 四畫面分割的部分仿真波形
圖7給出了四畫面分割時的部分仿真波形,EN2=1,VPO0~VPO3表示4個視頻通道的輸入,DOUT1~DOUT4是表示經(jīng)過幀合成以后的數(shù)據(jù),WRADD表示對應(yīng)這些數(shù)據(jù)的寫入SRAM的地址信號,DD表示將經(jīng)過幀合成后的數(shù)據(jù)流??梢钥闯觯紫韧ǖ?和通道1的數(shù)據(jù)經(jīng)過緩沖FIFO組,延時幾個字節(jié)后,以四個CLK為間隔的時差輸出,合成為數(shù)據(jù)DD:D9D8、DBDA、DBDA、DDDC、E1E0……,同時系統(tǒng)輸出了寫入SRAM的地址(十進制表示):0,1,320,321,2,3……。從仿真波形得出對數(shù)據(jù)流的幀合成處理是正確的。
任意畫面的分割器,只是要改變視頻信號的路數(shù),硬件上增減攝像頭、視頻解碼芯片,軟件方面,就要根據(jù)畫面分割要求對每一路視頻信號進行適當(dāng)抽取,然后合成為一幀數(shù)據(jù),再經(jīng)過視頻編碼芯片輸出[3]。
視頻信號的處理過程涉及到大量的數(shù)據(jù)交換,F(xiàn)PGA依賴其強大而靈活的邏輯控制功能和內(nèi)部先進的快速通道互連,使其以超小的端端延時而在數(shù)據(jù)處理方面處于優(yōu)勢。系統(tǒng)在QUARTUSⅡ環(huán)境下進行綜合驗證,共使用了1200個LE。將程序下載到FPGA芯片進行仿真驗證,實現(xiàn)了系統(tǒng)的功能。
[1] 胡瑤榮.基于FPGA的實時視頻采集系統(tǒng)[J].電視技術(shù).2005(2).81-83.
[2] 覃永新,陳文輝,章帆.實時視頻數(shù)據(jù)采集的FPGA實現(xiàn)[J].電子技術(shù)應(yīng)用.2009,31(9):46-48.
[3] 程治國.劉允才.多畫面遠程監(jiān)控系統(tǒng)中關(guān)鍵技術(shù)的實現(xiàn)[J]. 微型電腦應(yīng)用.2003,(19):14-16.