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