實(shí)時(shí)視頻數(shù)據(jù)采集的FPGA實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要: 介紹一種在工礦監(jiān)視系統(tǒng)中采用FPGA實(shí)現(xiàn)視頻數(shù)據(jù)實(shí)時(shí)采集和顯示的設(shè)計(jì)方案。系統(tǒng)中采用FPGA和視頻解碼器實(shí)現(xiàn)了高速連續(xù)的視頻數(shù)據(jù)采集與處理。處理后的視頻信號(hào)通過VGA格式轉(zhuǎn)換,可以在現(xiàn)場(chǎng)VGA顯示器上觀看,也可以通過鍵控將數(shù)據(jù)存儲(chǔ)在存儲(chǔ)介質(zhì)中,從而實(shí)現(xiàn)了實(shí)時(shí)視頻監(jiān)視。
關(guān)鍵詞: 實(shí)時(shí)數(shù)據(jù)采集;視頻監(jiān)視;數(shù)據(jù)格式;可編程邏輯陣列
視頻監(jiān)控系統(tǒng)利用現(xiàn)存的企業(yè)計(jì)算機(jī)網(wǎng)絡(luò)平臺(tái),將監(jiān)控范圍內(nèi)所需的視頻、音頻等數(shù)據(jù)以數(shù)字形式通過網(wǎng)絡(luò)進(jìn)行傳輸、存儲(chǔ)和共享,使安全監(jiān)控部門及時(shí)獲得關(guān)于監(jiān)控現(xiàn)場(chǎng)實(shí)時(shí)、準(zhǔn)確、具體、直觀的數(shù)據(jù),為安全生產(chǎn)提供一種新的技術(shù)手段。FPGA以其高性能、高可靠性以及現(xiàn)場(chǎng)修改、現(xiàn)場(chǎng)驗(yàn)證、現(xiàn)場(chǎng)實(shí)現(xiàn)的數(shù)字系統(tǒng)單片化的應(yīng)用優(yōu)勢(shì)而日益成為視頻信號(hào)處理領(lǐng)域的熱門技術(shù)。特別是其高速并行處理能力,使其在處理速度、成本、可靠性、開發(fā)周期和擴(kuò)展能力等方面具有明顯的優(yōu)勢(shì)。
本文設(shè)計(jì)一種用于工礦監(jiān)控系統(tǒng)的實(shí)時(shí)視頻數(shù)據(jù)采集系統(tǒng),系統(tǒng)中由CCD攝像頭采集到模擬視頻信號(hào),通過視頻解碼芯片轉(zhuǎn)換為PAL制式的數(shù)字視頻信號(hào),采用FPGA對(duì)其進(jìn)行格式轉(zhuǎn)換,在現(xiàn)場(chǎng)使用VGA顯示器進(jìn)行視頻監(jiān)視,在按鍵的控制下可以存儲(chǔ)于硬盤等存儲(chǔ)介質(zhì)中或傳輸至網(wǎng)絡(luò)中。本設(shè)計(jì)以高性能的 FPGA為核心部件,與視頻解碼芯片、SRAM等外圍器件構(gòu)成整個(gè)視頻數(shù)據(jù)處理系統(tǒng),集采集、存儲(chǔ)、顯示功能于一體,其系統(tǒng)總體框圖如圖1所示。設(shè)計(jì)中的 FPGA器件采用Altera公司的CycloneII系列EP2C8Q208C8N芯片;視頻解碼芯片選用Philips公司的SAA7113H作為視頻數(shù)據(jù)的模數(shù)轉(zhuǎn)換器件;SRAM采用高速、低功耗8 Mbit的IS61LV51216作為圖像數(shù)據(jù)緩存器。
1 實(shí)時(shí)視頻監(jiān)視系統(tǒng)的結(jié)構(gòu)
一個(gè)完整的成像系統(tǒng)不但要具備圖像信號(hào)采集功能,對(duì)圖像進(jìn)行實(shí)時(shí)顯示[1],而且要完成圖像信號(hào)的分析、處理(如圖像壓縮等)以及圖像處理結(jié)果的反饋等?;贔PGA的實(shí)時(shí)視頻監(jiān)視系統(tǒng)的結(jié)構(gòu)如圖2所示,主要包括IIC配置單元、數(shù)據(jù)采集及控制單元、VGA接口單元和壓縮存儲(chǔ)單元等。
2 視頻信號(hào)采集和顯示部分的實(shí)現(xiàn)
SAA7113H輸出PAL制式的ITU656標(biāo)準(zhǔn)YUV(4:2:2)格式數(shù)據(jù)[2],其中Y表示亮度信號(hào),而UV表示色差信號(hào),并且輸出像素時(shí)鐘為27 MHz。信號(hào)掃描方式為隔行掃描,幀率為25幀/秒,每幀圖像分為奇偶兩場(chǎng),每幀像素為864×625,其中有效數(shù)據(jù)為720×576。SAA7113H 輸出的一行視頻數(shù)據(jù)格式如圖3所示,每行有1 728 B,其中有效數(shù)據(jù)1 440 B,對(duì)應(yīng)720個(gè)有效像素,可以看成每一個(gè)像素由2個(gè)連續(xù)的字節(jié)表示,每個(gè)像素有自己的亮度數(shù)據(jù)Y,每兩個(gè)相鄰像素共用一組色差數(shù)據(jù)U和V。
由于系統(tǒng)要求在VGA顯示器上采用逐場(chǎng)逐行方式顯示RGB格式的數(shù)據(jù),并且要求所采集圖像的大小為640×480,因此,必須對(duì)SAA7113H所采集到的原始數(shù)字視頻信號(hào)進(jìn)行格式轉(zhuǎn)換和存儲(chǔ)方式的處理。
2.1 IIC配置單元
視頻解碼芯片SAA7113H接收CCD攝像頭輸出的模擬視頻信號(hào),將其轉(zhuǎn)換成標(biāo)準(zhǔn)的VPO數(shù)字信號(hào)。SAA7113H上電后,必須由核心控制芯片F(xiàn)PGA通過IIC總線對(duì)其內(nèi)部的寄存器進(jìn)行初始化設(shè)置,然后才能正常工作。IIC配置單元的任務(wù)就是按照IIC總線的數(shù)據(jù)傳輸規(guī)范對(duì) SAA7113H內(nèi)部的寄存器進(jìn)行初始化設(shè)置,其時(shí)鐘信號(hào)由SAA7113H提供的27 MHz的像素時(shí)鐘經(jīng)過時(shí)鐘控制單元分頻得到,數(shù)據(jù)速率在100 kb/s~400 kb/s。
IIC配置單元的內(nèi)部結(jié)構(gòu)如圖4所示,由IIC控制單元iic_all、配置數(shù)據(jù)存儲(chǔ)器iic_rom和讀地址發(fā)生器div448構(gòu)成。IIC控制單元iic_all是核心控制單元,采用狀態(tài)機(jī)設(shè)計(jì),在start信號(hào)有效后使SCL高電平時(shí)拉低SDA數(shù)據(jù)線,同時(shí)控制地址發(fā)生器div448產(chǎn)生讀地址信號(hào)送入配置數(shù)據(jù)存儲(chǔ)器iic_rom; iic_rom采用可設(shè)置參數(shù)模塊LPM_ROM,定制為數(shù)據(jù)寬度為1的只讀ROM,每個(gè)存儲(chǔ)單元按位預(yù)存SAA7113H內(nèi)部寄存器的控制字;在時(shí)鐘使能端clken有效時(shí)按位串行寫入SDA數(shù)據(jù)線。IIC控制單元在start信號(hào)有效后的第8個(gè)時(shí)鐘上升沿獲取到SAA7113H的低電平應(yīng)答信號(hào)后繼續(xù)發(fā)送數(shù)據(jù)給SAA7113H,否則將重新回到起始狀態(tài)等待。
SAA7113H完成初始化配置后,輸出數(shù)字視頻信號(hào)VPO[7..0]和相應(yīng)的同步信號(hào):行有效信號(hào)RTS0、奇偶場(chǎng)標(biāo)識(shí)信號(hào)RTS1等。其中RTS0高電平表示有效數(shù)據(jù)行,低電平表示消隱行;RTS1為奇偶場(chǎng)標(biāo)識(shí)信號(hào),高電平表示奇場(chǎng),低電平表示偶場(chǎng)。
2.2 數(shù)據(jù)采集及控制單元
數(shù)據(jù)采集及控制單元主要由3個(gè)模塊組成:采集模塊acquisition、雙口RAM器件lpm_ram_dp0和幀存控制模塊 sto_ctl,其內(nèi)部電路圖如圖5所示。此單元的任務(wù)就是由采集模塊截取SAA7113H輸出的一行數(shù)據(jù)中的640個(gè)有效像素(共1 280 B)寫入雙口RAM器件進(jìn)行緩存,幀存控制模塊將數(shù)據(jù)從雙口RAM中順序讀出后送入外擴(kuò)SRAM中逐行存儲(chǔ),同時(shí)控制2片SRAM交替讀寫,讀出的數(shù)據(jù)送入VGA接口單元進(jìn)行VGA格式轉(zhuǎn)換和圖像顯示。
2.2.1 采集模塊acqusition
采集模塊接收SAA7113H的RTS0、像素時(shí)鐘信號(hào)SYS_CLK和視頻數(shù)據(jù)VPO[7..0],輸出為一行數(shù)據(jù)中的有效數(shù)據(jù)vpo_out[7..0]、有效像素的計(jì)數(shù)值tempp[10..0]和表示行狀態(tài)有效的信號(hào)line_state。
若要截取一行數(shù)據(jù)中的有效數(shù)據(jù),首先要捕捉到有效數(shù)據(jù)的起始時(shí)刻。采集模塊根據(jù)圖3中視頻數(shù)據(jù)流的時(shí)間參考代碼SAV來獲取有效數(shù)據(jù)的起始時(shí)刻。在一幀完整的圖像數(shù)據(jù)中,第一場(chǎng)有效數(shù)據(jù)階段的SAV為“1000XXXX”,而消隱階段的時(shí)間參考代碼中的SAV為“1010XXXX”。通過判斷場(chǎng)有效信號(hào)rts0為1時(shí),分析數(shù)據(jù)流中的“80 10 FF 00 00 SAV”定時(shí)參考代碼,啟動(dòng)計(jì)數(shù)模為1 440的計(jì)數(shù)器tempp。計(jì)數(shù)值為40時(shí)置狀態(tài)信號(hào)line_state為1,標(biāo)志一行有效數(shù)據(jù)的開始;計(jì)數(shù)值為1 320時(shí)置line_state為0,結(jié)束一行有效數(shù)據(jù)的采集。在這個(gè)時(shí)間段內(nèi)就可以截取一行中1 280 B的有效數(shù)據(jù),繼而送入雙口RAM緩存。
2.2.2 雙口RAM器件lpm_ram_dp0
雙口RAM 器件利用FPGA內(nèi)部的參數(shù)可設(shè)置模塊LPM_RAM_DP定制而成,用來緩存一行的有效視頻數(shù)據(jù),而后存儲(chǔ)在SRAM中。由于SAA7113H輸出是8 位的VPO數(shù)據(jù),而片外SRAM具有16根數(shù)據(jù)線,作為連接于兩者之間的數(shù)據(jù)接口,雙口RAM應(yīng)該有兩套獨(dú)立的數(shù)據(jù)端口和時(shí)鐘端口,可以同時(shí)進(jìn)行讀寫操作。在軟件QUARTUSⅡ上定制LPM_RAM_DP的參數(shù)為:寫數(shù)據(jù)位寬=8;寫地址線寬=11;讀數(shù)據(jù)位寬=16,讀地址線寬=10;地址輸入由時(shí)鐘的上升沿鎖入。雙口RAM的容量為2 KB,寫時(shí)鐘采用系統(tǒng)像素時(shí)鐘,讀時(shí)鐘采用由幀存控制模塊產(chǎn)生的像素時(shí)鐘的二分頻信號(hào)rdram_clk。
2.2.3 幀存控制模塊sto_ctl
幀存控制模塊是FPGA芯片與片外SRAM的接口,其任務(wù)是產(chǎn)生片內(nèi)雙口RAM的讀地址和片外SRAM的寫地址,將每行視頻數(shù)據(jù)從雙口RAM中順序讀出,按照逐行存儲(chǔ)的形式寫入SRAM中。當(dāng)一片SRAM寫滿一幀數(shù)據(jù)后,逐行送入VGA接口單元,同時(shí)切換讀寫操作,在另一片 SRAM里連續(xù)寫入下一幀視頻數(shù)據(jù)。幀存控制單元的工作主要是對(duì)雙口RAM的讀操作、SRAM的讀寫操作、SRAM的乒乓控制和幀頻的轉(zhuǎn)換。
雙口RAM的讀操作由模為640的加法計(jì)數(shù)器rdram_addd完成。為了保證數(shù)據(jù)不讀空,在雙口RAM寫使能信號(hào)有效后的第8個(gè)系統(tǒng)時(shí)鐘,幀存控制模塊向雙口RAM發(fā)出讀允許信號(hào)rd_ram,同時(shí)計(jì)數(shù)器工作,按照rdram_clk時(shí)鐘輸出雙口RAM的讀地址。
SRAM的讀寫操作主要是對(duì)SRAM訪問地址的控制。SRAM芯片IS61LV51216具有19根地址線,取其中10根為行向地址線,則每行存儲(chǔ) 640個(gè)雙字節(jié)的視頻數(shù)據(jù);9根為列向地址線,可存儲(chǔ)480行的視頻數(shù)據(jù);剩余的存儲(chǔ)空間空閑。視頻數(shù)據(jù)在SRAM中存儲(chǔ)的行向地址與雙口RAM讀地址之間有確定的等同關(guān)系,所以行向地址仍然采用計(jì)數(shù)器rdram_addd的計(jì)數(shù)值,列向地址由模為480的計(jì)數(shù)器cnt480產(chǎn)生。為了實(shí)現(xiàn)數(shù)據(jù)的逐行存儲(chǔ),奇場(chǎng)和偶場(chǎng)的行數(shù)據(jù)必須隔行交錯(cuò)存儲(chǔ),即列向地址是在RTS1=1時(shí)(即奇場(chǎng))從000H按時(shí)鐘加2遞增至1DEH,在RTS1=0時(shí)(偶場(chǎng))從 001H按時(shí)鐘加2遞增至1DFH,這樣就實(shí)現(xiàn)了隔行掃描到逐行存儲(chǔ)的結(jié)構(gòu)轉(zhuǎn)換。
系統(tǒng)中采用了2片SRAM,以乒乓方式工作,一片在寫入視頻數(shù)據(jù)的同時(shí),另一片讀出數(shù)據(jù)送入VGA接口單元。當(dāng)其中一片SRAM寫完一幀數(shù)據(jù)后,幀存控制模塊會(huì)產(chǎn)生一個(gè)轉(zhuǎn)換信號(hào),輸出互補(bǔ)的讀允許SRAM_RD和寫允許信號(hào)SRAM_WR,控制2片SRAM切換工作,從而實(shí)現(xiàn)視頻數(shù)據(jù)的實(shí)時(shí)連續(xù)處理。
幀頻的轉(zhuǎn)換是通過復(fù)制幀實(shí)現(xiàn)的。PAL制式的信號(hào)每秒25幀,VGA顯示器工作場(chǎng)頻是每秒60幀,幀頻比為5:12。要轉(zhuǎn)換為能夠滿足每秒60幀要求的視頻信號(hào),最簡單的辦法就是復(fù)制幀。在本設(shè)計(jì)中每5幀做一次頻率放大,第一幀、第三幀傳輸3次,其余各幀傳輸2次[3]。由于RTS0信號(hào)的上升沿表示新幀的起點(diǎn),所以可以利用RTS0信號(hào)觸發(fā)一個(gè)序列發(fā)生器,產(chǎn)生對(duì)SRAM讀操作次數(shù)的控制。
2.3 VGA接口單元
VGA接口單元由2個(gè)模塊組成:VGA時(shí)序驅(qū)動(dòng)模塊,用于產(chǎn)生VGA正常工作所需的時(shí)序信號(hào),包括60 Hz掃描時(shí)鐘VGA_CLK、場(chǎng)同步信號(hào)VS和行同步信號(hào)HS;VGA信號(hào)轉(zhuǎn)換模塊,用于接收SRAM中的YUV信號(hào)并將其轉(zhuǎn)換成RGB信號(hào),并根據(jù) VGA的掃描時(shí)序?qū)GB信號(hào)通過DAC,最后送入VGA顯示器。
2.3.1 VGA時(shí)序發(fā)生模塊VGA_SHIXU
VGA時(shí)序發(fā)生器遵循VGA工業(yè)標(biāo)準(zhǔn),即640 Hz×480 Hz×60 Hz模式,行同步HS和場(chǎng)同步VS信號(hào)的頭脈沖是負(fù)脈沖,所要求的頻率有:像素輸出頻率為25.175 MHz,行頻為31469 Hz,場(chǎng)頻為59.94 Hz。VGA水平時(shí)序中,每行包括800像素點(diǎn),其中640像素點(diǎn)為有效顯示區(qū),160像素點(diǎn)為行消隱區(qū)。VGA垂直時(shí)序中,每場(chǎng)有525行,其中480 行為有效顯示行,45行為場(chǎng)消隱區(qū)。時(shí)序發(fā)生器接收外部輸入50 MHz時(shí)鐘信號(hào),利用模為800的行點(diǎn)數(shù)計(jì)數(shù)器cnt800完成行掃描時(shí)序,模為525的場(chǎng)行數(shù)計(jì)數(shù)器cnt525完成場(chǎng)掃描時(shí)序。cnt800對(duì)經(jīng)過 PLL分頻得到的25 MHz時(shí)鐘進(jìn)行像素計(jì)數(shù),并在每次計(jì)數(shù)值清零前生成一個(gè)脈沖L_STATUS,cnt525對(duì)L_STATUS進(jìn)行場(chǎng)行數(shù)計(jì)數(shù)。系統(tǒng)復(fù)位時(shí),同步信號(hào) HS、VS為1,計(jì)數(shù)器全部清零;幀存控制單元的寫VGA信號(hào)VGA_WR有效時(shí),將HS、VS拉低電平,cnt800開始計(jì)數(shù)。程序中對(duì)cnt800的計(jì)數(shù)值進(jìn)行判斷,當(dāng)為95時(shí)(行消隱前肩)將L_STATUS置1,為143時(shí)將640 B的RGB信號(hào)送入VGA顯示器,計(jì)滿后再次拉低HS信號(hào)和L_STATUS。當(dāng)cnt525的計(jì)數(shù)值為1時(shí)(場(chǎng)消隱前肩)將VS置1,為35時(shí)場(chǎng)同步輸出,允許輸出HS信號(hào)。行、場(chǎng)消隱的邏輯與即為復(fù)合消隱信號(hào),連同行、場(chǎng)同步信號(hào)便產(chǎn)生了VGA接口的時(shí)序信號(hào)[3]。
2.3.2 VGA信號(hào)轉(zhuǎn)換模塊VGA_COV
VGA信號(hào)轉(zhuǎn)換模塊將輸入的PAL制式的YUV(4:2:2)信號(hào)轉(zhuǎn)換成RGB信號(hào)。首先對(duì)數(shù)據(jù)采集單元截獲的 YUV(4:2:2)視頻數(shù)據(jù)進(jìn)行插值,得到Y(jié)UV(4:4:4)視頻數(shù)據(jù)(如圖6所示),將一個(gè)像素點(diǎn)的數(shù)據(jù)YUV(如U0Y0V0)合并為獨(dú)立并行的 24 bit數(shù)據(jù),進(jìn)入色彩轉(zhuǎn)換單元VGA_COV后再經(jīng)過程序計(jì)算來進(jìn)行色度空間變換,獲取并行輸出的RGB(8:8:8)值。色彩空間變換公式如下:
計(jì)算結(jié)果均除以1 024(即右移10位),即可得到RGB的值[4]。對(duì)輸出的RGB(8:8:8)取高位獲得RGB(5:6:5),通過D/A轉(zhuǎn)換器送入VGA顯示器。
3 仿真與性能分析
3.1 部分仿真波形
SRAM寫入第一行數(shù)據(jù)的仿真波形如圖7所示。當(dāng)RTS1=1(奇場(chǎng))時(shí),在行有效信號(hào)有效后,模為1 440的行計(jì)數(shù)器tempp開始計(jì)數(shù);在計(jì)數(shù)值tempp為40時(shí),應(yīng)該提取到有效數(shù)據(jù)流中A8 A9 AA AB AC AD AE……計(jì)數(shù)值為48時(shí),視頻數(shù)據(jù)開始將雙字節(jié)的視頻數(shù)據(jù)寫入SRAM中,如A8 A9, AA AB, AC AD……。
3.2 系統(tǒng)性能估算
為了保證系統(tǒng)的實(shí)時(shí)性,一行有效視頻數(shù)據(jù)的存儲(chǔ)必須在下一行數(shù)據(jù)到來之前完成。本系統(tǒng)中,存儲(chǔ)一行有效視頻數(shù)據(jù)以及格式調(diào)整等需要占用1 288個(gè)系統(tǒng)時(shí)鐘。SRAM的最高時(shí)鐘頻率可以達(dá)到125 MHz,則存儲(chǔ)一行視頻數(shù)據(jù)所需的時(shí)間T1=1 288/125=10.304 ns。一行視頻數(shù)據(jù)中的消隱期和無效數(shù)據(jù)占用448字節(jié)時(shí)間,輸出的像素時(shí)鐘為27 MHz,則消隱期和無效數(shù)據(jù)所占的時(shí)間為T2=448/27=16.592 ns。由于在行消隱期和無效數(shù)據(jù)所花費(fèi)的時(shí)間T2大于存儲(chǔ)一行視頻數(shù)據(jù)所需的時(shí)間T1,因此完全可以在行消隱期實(shí)現(xiàn)一行視頻數(shù)據(jù)的實(shí)時(shí)存儲(chǔ),滿足實(shí)時(shí)數(shù)據(jù)處理的要求。
本設(shè)計(jì)在QUARTUSⅡ8.1環(huán)境下進(jìn)行綜合驗(yàn)證,其頂層設(shè)計(jì)采用原理圖設(shè)計(jì)方式,各模塊采用VHDL語言設(shè)計(jì),共使用了364個(gè)LE,程序下載到 FPGA芯片進(jìn)行仿真驗(yàn)證,很好地實(shí)現(xiàn)了實(shí)時(shí)視頻監(jiān)控的功能。在本設(shè)計(jì)的基礎(chǔ)上稍加改動(dòng)即可實(shí)現(xiàn)可變分辨率的視頻圖像采集與處理系統(tǒng)。