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