摘 要: 給出一種4路視頻合成系統(tǒng)的FPGA設(shè)計(jì),介紹了FPGA與AD芯片TVP5154的I2C通信配置、有效視頻數(shù)據(jù)的抽取方法、SRAM乒乓操作以及FPGA對(duì)于視頻的拼接處理方法。
關(guān)鍵詞: FPGA; 視頻合成; TVP5154; 乒乓操作
隨著人們?cè)絹碓阶⒅匕踩珕栴},監(jiān)控開始向小型化、家庭化發(fā)展。為了實(shí)現(xiàn)全方位多角度監(jiān)控,需要采用多路攝像及多個(gè)顯示器來顯示實(shí)時(shí)信息,同時(shí)多路存儲(chǔ)的容量需求比較大。為了在容量有限的情況下存儲(chǔ)更多數(shù)據(jù), 需要對(duì)多路視頻進(jìn)行相關(guān)處理,將多路視頻合成一路視頻信號(hào)再進(jìn)行壓縮存儲(chǔ)和顯示。
1 系統(tǒng)組成及工作原理
綜合考慮視頻圖像的實(shí)時(shí)性以及功耗體積等因素,采取以下方案:由4路并行的視頻模數(shù)轉(zhuǎn)換芯片TVP5154將4路視頻信號(hào)轉(zhuǎn)換成數(shù)字格式的視頻信號(hào),并用FPGA進(jìn)行合成處理[1],再送給ARM模塊進(jìn)行進(jìn)一步壓縮、存儲(chǔ)等處理。圖1為系統(tǒng)的FPGA部分的硬件結(jié)構(gòu)圖。
采用Xilinx公司Spartan 3E系列中的XC3S500E芯片,該芯片具有功耗低、成本低等優(yōu)點(diǎn)。采用TVP5154模數(shù)芯片主要是考慮到它是4路并行的,可節(jié)省板級(jí)空間,也方便控制,它可以將輸入的4通道NTSC/PAL/SECAM 格式的視頻數(shù)據(jù)轉(zhuǎn)換成4通道的8位ITU-R BT.656[2]格式的數(shù)字視頻輸出供FPGA進(jìn)行處理。FPGA包含I2C[3]通信模塊、視頻采集模塊、處理模塊、存儲(chǔ)控制模塊以及ARM通信模塊。
2 模塊設(shè)計(jì)
2.1 I2C通信模塊
FPGA通過I2C總線[4]實(shí)現(xiàn)對(duì)TVP5154的配置,完成4路視頻的AD轉(zhuǎn)換。將I2CA0和I2CA1接地,把從機(jī)地址設(shè)為B8h。系統(tǒng)上電后,設(shè)備處于一個(gè)輸出未定義的未知狀態(tài),直到它接收到RESET 命令。在系統(tǒng)上電或硬件重啟后,遵循以下自檢過程:
(1)等待1 ms,4個(gè)解碼通道的寄存器(7Fh)必須寫入00h 值。
(2)等待1 ms,讀出4個(gè)解碼通道的寄存器(81h)的版本值。
(3)驗(yàn)證讀出來的值是否為54h。
(4)如果讀出的值不為54h,則需要重啟。
重復(fù)此過程,直到4個(gè)通道讀寄存器(81h)的值均為54h。
自檢完成之后,F(xiàn)PGA向TVP5154的 FEh寄存器寫入0Fh,讓4個(gè)解碼器同時(shí)接收FPGA的寫事務(wù),輸出設(shè)置成標(biāo)準(zhǔn)含嵌入式同步信號(hào)的ITU-R BT.656格式的數(shù)字視頻信號(hào),如圖2所示,包括3路同步信號(hào):場(chǎng)、水平、豎直同步信號(hào),并有一路時(shí)鐘信號(hào),頻率為27 MHz。
2.2 視頻采集模塊
視頻采集模塊主要是將ITU656格式的視頻數(shù)據(jù)進(jìn)行緩存和有效數(shù)據(jù)抽取。首先提取視頻有效數(shù)據(jù),送入FIFO(深度為2k,可存儲(chǔ)一行有效數(shù)據(jù))進(jìn)行緩存。接著通過控制讀取FIFO的數(shù)據(jù)來進(jìn)行行列1/2抽取。
Modelsim上截取的采集狀態(tài)轉(zhuǎn)換圖如圖3所示。先對(duì)場(chǎng)同步信號(hào)FID進(jìn)行采樣,下降沿啟動(dòng)狀態(tài)機(jī),從NULL狀態(tài)進(jìn)入ST_IDLE狀態(tài),然后開始檢測(cè)同步信號(hào)(FF0000 XXh),出現(xiàn)FF狀態(tài)機(jī)跳轉(zhuǎn)到ST_FF,再出現(xiàn)00則跳轉(zhuǎn)到ST_00,如果檢測(cè)到還為00則跳轉(zhuǎn)到ST_START。此時(shí)根據(jù)XX的值來確定是否為有效數(shù)據(jù),如果是非有效數(shù)據(jù),則跳回ST_IDLE,再次跳轉(zhuǎn);如果是有效數(shù)據(jù),則根據(jù)XX判斷奇偶場(chǎng),開始采集計(jì)數(shù),根據(jù)要求選取采集深度,全采為1 440 B。
合成的圖像4路按順序分別位于左上、右上、左下、右下。由于視頻為隔行掃描,為實(shí)現(xiàn)行1/2抽取,將4路視頻信號(hào)分為兩組,其中前兩路采集偶場(chǎng)數(shù)據(jù),后兩路采集奇場(chǎng)數(shù)據(jù)。接著分時(shí)讀取組內(nèi)兩個(gè)FIFO實(shí)現(xiàn)列1/2抽取,以實(shí)現(xiàn)行列1/2抽取。抽取時(shí)需要注意的是, ITU656為YUV422格式的,視頻數(shù)據(jù)按照Cb0,Y0,Cr0,Y1,Cb1,Y2,Cr1,…輸出,每?jī)蓚€(gè)像素點(diǎn)共享紅藍(lán)色差信息,加上亮度信息,共4 B,處理時(shí)需要將兩個(gè)像素點(diǎn)作為一個(gè)整體。仿真結(jié)果如圖4所示。
圖4為偶場(chǎng)數(shù)據(jù)處理,奇場(chǎng)相同。偶場(chǎng)有效數(shù)據(jù)在FF000080h之后,設(shè)17個(gè)有效數(shù)據(jù),前16個(gè)數(shù)據(jù)第1路為00h~0fh,第2路為10h~1fh,第17個(gè)數(shù)據(jù)任意,采集深度為16,最后一個(gè)數(shù)據(jù)被丟棄。當(dāng)FIFO1數(shù)據(jù)存入4個(gè)(或更大)之后產(chǎn)生FIFO讀信號(hào)flag_e開始讀取兩個(gè)FIFO的數(shù)據(jù)(為實(shí)現(xiàn)兩路視頻數(shù)據(jù)的同步)。flag_e作為有效數(shù)據(jù)的同步信號(hào),由于讀操作延遲一個(gè)周期,因此調(diào)整一個(gè)時(shí)鐘周期得到flag。dout1是從FIFO1中讀取的數(shù)據(jù),dout2是從FIFO2中讀取的數(shù)據(jù)。檢測(cè)到flag_t上升沿count清零開始計(jì)數(shù),并用count[2]作為2選1 MUX的控制端,dout1和dout2為輸入,dout_e為輸出。奇場(chǎng)的數(shù)據(jù)處理是同樣的過程,得到輸出dout_o。由于奇偶場(chǎng)是分開的,dout分時(shí)輸出dout_e和dout_o。
2.3 視頻存儲(chǔ)控制模塊
選取的SRAM容量為2 MB×8,共有21根地址線,地址線分為行地址和列地址[5]。ITU656標(biāo)準(zhǔn)的視頻一幀有效數(shù)據(jù)分辨率為576×720,共576行,選擇地址線高10位adr[20..11](0~1 024)為行地址,每行720個(gè)像素點(diǎn),每個(gè)像素點(diǎn)為2 B,每行共1440 B,選擇地址線低11位adr[10..0](0~2 048)為列地址。
行地址row[9..0]操作通過檢測(cè)同步信號(hào)flag下降沿,數(shù)據(jù)有效時(shí)同步信號(hào)為高電平,當(dāng)一行有效數(shù)據(jù)存儲(chǔ)完成之后flag變低,行地址加1。
有效數(shù)據(jù)采集模塊輸出數(shù)據(jù)為兩路信號(hào)交替出現(xiàn),需交替產(chǎn)生存儲(chǔ)地址,如下:0、1、2、3、720、721、722、723、4、5、6、7…。如果分辨率有其他要求,可根據(jù)所需來確定第2路地址的起始位置。
仿真中以16個(gè)數(shù)據(jù)為例,波形如圖5所示。初始賦值adr_ 2為720(第2路的起始地址,根據(jù)需要設(shè)置,16個(gè)數(shù)據(jù)設(shè)為8),其余兩個(gè)地址adr_v和adr_1賦值為0。Flag出現(xiàn)高時(shí)adr_v開始計(jì)數(shù),由于兩路數(shù)據(jù)間隔4個(gè)周期,所以設(shè)置adr_v為3位,檢測(cè)最高位選擇對(duì)1、2兩個(gè)地址中一個(gè)進(jìn)行+1運(yùn)算,然后以adr _v[2]作為2選1 MUX控制端,列地址column作為輸出,得到所需的列地址序列。在flag下降沿之后行地址row加1,得到所需的寫地址。
乒乓緩沖的切換邏輯只需檢測(cè)行地址,當(dāng)行地址達(dá)到576即第576行(對(duì)應(yīng)行地址為575)數(shù)據(jù)已經(jīng)存入SRAM,拉高ready信號(hào),然后將row清零。切換兩個(gè)SRAM的操作方向,將SRAM1總線接至后面的合成模塊,而SRAM2則接至地址產(chǎn)生邏輯的輸出等待寫入。
2.4 視頻處理模塊
視頻處理模塊主要實(shí)現(xiàn)4路視頻的合成處理。根據(jù)ITU656格式,調(diào)用一個(gè)IP生成一個(gè)ROM,存入視頻幀的第一行數(shù)據(jù),EAV和SAV為8 B,EAV后280 B為消隱數(shù)據(jù),SAV后1 440 B為消隱數(shù)據(jù),共1 728 B。其中EAV為FF0000B6h,SAV為FF0000ABh。
根據(jù)存儲(chǔ)模塊的切換邏輯送出來的READY信號(hào),檢測(cè)到上升沿之后開始狀態(tài)跳轉(zhuǎn),從IDLE狀態(tài)跳轉(zhuǎn)到EVEN_BLANK1狀態(tài),設(shè)置一個(gè)模為22的計(jì)數(shù)器,包含一個(gè)模為1 728的計(jì)數(shù)器作為地址來讀取ROM中的數(shù)據(jù)。讀完ROM的數(shù)據(jù),外計(jì)數(shù)器+1輸出一行數(shù)據(jù),共輸出22行數(shù)據(jù)。然后跳轉(zhuǎn)到EVEN_VALID狀態(tài),此時(shí)先讀取ROM中前288 B,并改寫EAV和SAV的最后1 B,分別改為9Dh和80h。接著開始讀取SRAM中的數(shù)據(jù),按照行列地址進(jìn)行讀取,行基地址為0,按列地址遞增讀取,讀至1 440列地址歸零,結(jié)束一行讀取,共重復(fù)288次輸出有效數(shù)據(jù)行。由于是隔行掃描,每次行地址加2,最后一次讀取的為第574行。接著狀態(tài)跳轉(zhuǎn)到EVEN_BLANK2,輸出兩行偶場(chǎng)消隱行,讀取ROM的數(shù)據(jù)即可。再跳轉(zhuǎn)到ODD_BLANK1,輸出23行奇場(chǎng)消隱行。讀取ROM的數(shù)據(jù)并改變EAV和SAV的最后1 B為F1h和ECh。然后跳至ODD_VALID輸出奇場(chǎng)有效數(shù)據(jù),同EVEN _VALID,改寫EAV和SAV最后1 B為DAh和C7h,行基地址為1,每次加2,最后一次讀取的為第575行。奇場(chǎng)有效行輸出完成后,進(jìn)入ODD_BLANK2,輸出兩行奇場(chǎng)消隱行。最后跳回EVEN _BLANK1輸出下一幀數(shù)據(jù)。
EVEN_BLANK1輸出22行,EVEN_ VALID輸出288行,EVEN_BLANK2輸出2行,ODD_BLANK1輸出23行,ODD_VALI D輸出288行,ODD_B LANK2輸出2行,一幀共625行標(biāo)準(zhǔn)的ITU656格式的視頻數(shù)據(jù),并根據(jù)格式在特定位改寫同步信號(hào)。
2.5 ARM通信模塊
ARM通信模塊主要將合成所得的視頻數(shù)據(jù)送往ARM模塊,進(jìn)行進(jìn)一步的處理,包括壓縮、存儲(chǔ)等。接口主要有8 bit數(shù)據(jù)data[7:0],3 bit同步信號(hào)F、H、V,一路時(shí)鐘信號(hào)clk,以及握手信號(hào)。
本設(shè)計(jì)采用自頂向下的分析方法,根據(jù)系統(tǒng)的需求劃分功能模塊,給出一種視頻合成方法的FPGA設(shè)計(jì),并詳細(xì)介紹各模塊的具體功能和實(shí)現(xiàn)。通過給定已知數(shù)據(jù)進(jìn)行仿真驗(yàn)證,證明了系統(tǒng)可以較好地實(shí)現(xiàn)合成操作。
參考文獻(xiàn)
[1] 蔡青青,龔立群,黃益新.基于FPGA的視頻監(jiān)控系統(tǒng)[J].微型機(jī)與應(yīng)用, 2012, 31(4):37-39.
[2] Recommendation BT.656-5[EB/OL]. [2007-12]. http://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.656-5-200712-I!!PDF-E.pdf.
[3] 吳厚航. 深入淺出玩轉(zhuǎn)FPGA(第1版)[M]. 北京:北京航空航天大學(xué)出版社, 2010.
[4] 潘利明, 王惠平,劉春風(fēng).基于FPGA視頻采集中的I2C總線設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010(8):80-82.
[5] 陳文輝, 覃永新. 基于FPGA的多路視頻合成系統(tǒng)的設(shè)計(jì)[J]. 制造業(yè)自動(dòng)化, 2010,32(8):62-65.