摘要:構建了以FPGA為核心芯片的高速圖像采集與處理系統,圖形采集頻率可達1315MHz。在該系統中,采用了視頻A/D芯片SAA7111A將電視信號轉換成數字信號,并由FPGA作為控制器將數字信號存入SRAM中,以便進行處理,提取有用數據;系統還采用了EZUSB2131Q芯片來進行處理后的數據與PC機的傳輸。
關鍵詞:視頻圖像;信號處理;FPGA;VHDL;EZUSB;視頻A/D
傳統的基于ISA,PCI等總線的圖像采集卡已經應用非常廣泛,但速度慢、處理功能簡單,對于特殊要求往往需要后續處理部分。因此,本文構建了一種高速圖像采集系統。它主要由FPGA(field programmable gate array)、視頻A/D芯片SAA7111A以及USB總線構成。該系統可以根據需要進行現場可編程,具有通用性好、成本低等優點。在FPGA中利用硬件描述語言VHDL編程實現。FPGA可以在數據采集系統中取代單片機和DSP對數據采集過程進行控制。
PHILIP公司的視頻A/D芯片SAA7111A具有四路視頻輸入,抗混濾波、梳狀濾波都被集成到芯片內部,帶來了極大的方便,但系統內部鎖相環技術的集成使得可靠性和設計復雜度都有極大的降低。
CYPRESS的EZUSB2131QC芯片是針對USB1.1協議開發的,兼容全速和低速傳輸,功能高度集成化。該芯片集成了一個增強型8051處理器、一個“智能型”串行接口引擎(SIE)、一個USB收發器、集成I2C總線控制器、片上RAM和FIFO。
圖像采集與處理系統設計
系統由視頻A/D芯片、FPGA控制模塊、數據存儲模塊SRAM、EZUSB接口模塊和PC機應用程序組成。FPGA程序用VHDL語言編寫。整體框圖如圖1所示。
圖1 硬件系統結構框圖
視頻信號的A/D轉換
SAA7111A提供了4個模擬輸入通道,可以編程選擇使用其中的一個或多個通道。視頻信號輸入芯片后,一路經過緩沖器從AOUT引腳輸出,這個信號作為視頻監控信號,以檢測是否有視頻信號輸入;另外一路信號經過模/數轉換后產生數字色度信號和亮度信號,分別進行亮度信號處理和色度信號處理。亮度信號處理的結果,一路送到色度信號處理器,以進行綜合處理,產生灰度信號Y和UV信號,格式化后從數據線VPO[15:00]輸出,其中高8位為Y、低8位為UV;另一路進入同步分離器,經過PLL產生相應的行同步信號HS和場同步信號VS,同時數字PLL驅動時鐘發生器模塊,從而產生視頻信號工作頻率為27MHz的LLC和13.5MHz的LLC2時鐘信號。
SAA7111A正常工作需要對內部32個寄存器正確配置,通過I2C總線由EZUSBAN2131Q寫入SAA7111A的內部寄存器。
FPGA控制模塊
經過對系統功能的分析和劃分,可以將設計劃分為若干個子模塊。每個子模塊通過內部握手信號相互關聯并完成相對獨立的功能。將子模塊組合起來就能得到系統級的功能芯片。將FPGA劃分為以下幾個功能子模塊:輸入信號緩沖模塊、消除抖動模塊、SAA7111A接口模塊、SRAM接口模塊、實時插入結束標識模塊、緩沖模塊FIFO、多路選擇器DATA_MUX、數據處理模塊DATA_Proc等幾個部分,如圖2所示。模塊之間通過中間信號進行通訊,從而實現數據的傳輸和控制。
圖2 FPGA內部結構框圖
SAA_INTERFACE模塊
SAA_INTERFACE模塊的主要功能是接收來自SAA7111A的數據信號和狀態信號,實現FPGA與視頻A/D芯片SAA7111A的接口,并根據這些信號產生相應像素灰度信息的存儲地址,在時鐘信號LLC2的控制下,完成數據在SRAM中的存儲寫入地址和讀出地址及對兩片SRAM進行乒乓操作的指示信號的生成。
分析SAA7111A輸出的狀態信號的時序圖,可以分析得到以下結論:
(1)每行圖像共有864個像素,其中0~719為有效像素、720~863為水平消隱階段,在消隱期間的像素為無效像素。
(2)每行圖像起始條件是:場參考信號VREF為邏輯‘1’時,HREF產生一個上升沿。每行圖像結束條件是:HREF信號的出現下降沿。當VREF為邏輯‘0’狀態時,處于場消隱階段,此時為無效圖像。
(3)每幀圖像起始的條件是:RTS0為邏輯‘1’期間,VREF產生一個上升沿。而每幀圖像結束的條件是:RTS0為邏輯‘0’期間,VREF產生一個下降沿。
由于復合視頻信號CVBS是由隔行掃描的方式得到的,而計算機顯示器是逐行掃描來顯示圖像的,所以寫入SRAM的數據必須隔行寫入,而讀出SRAM的數據必須逐行讀出。讀取SRAM時,由于奇偶場已經“隔行”寫入SRAM中,所以只需要逐行順序讀取即可。
SRAM_INTERFACE模塊
接口模塊SRAM_INTERFACE的主要功能是完成與SRAM存儲器的接口工作。由于采用了兩片SRAM,所以FPGA中的SRAM接口模塊也應該有兩個,該模塊根據當前狀態做出判斷,從而對SRAM發出相應的控制信號和地址信號,完成數據的寫入和讀出工作。
INSERT_FLAGS模塊
為了在上位機顯示所采集到的圖像,除了需要相應的像素信息外,還必須提供行同步信號和、場同步信號。本系統沒有另外提供專門的行同步信號、幀同步信號,而是通過在恰當的時刻插入標識數據的方法來代替視頻流的行同步信號和幀同步信號。
INSERT_FLAGS模塊將在行結束時,將自定義的行結束標識插入到數據流中;在幀結束時,將幀結束標識插入到視頻流中,從而為上位機實現對圖像信息的再現和處理創造了方便條件。
DATA_MUX模塊
DATA_MUX模塊實現了對數據的流向的控制和數據處理工作。它接收來自SAA7111A的原始數據VPO和實時插入的行、幀結束標識信號VPO_FLAGS,并產生終的連續的含有場、幀結束標識的數據流VPO_ALL,并控制VPO_ALL的流向。當WR1RD2為邏輯‘1’時,VPO_ALL寫入SRAM1,同時將已經存儲到SRAM2的數據讀出到DATA_Proc模塊中;當WR1RD2為邏輯‘0’時,VPO_ALL的數據寫入SRAM2中,同時將SRAM1的數據讀出到DATA_Proc模塊中。
DATA_Proc數據處理模塊
DATA_Proc模塊用于對采集的數據進行處理,根據項目要求,其工作主要是對信號進行濾波和邊緣提取,從而提取有效數據,減少數據的傳輸量。為了減少工作量,采用了Xilinx公司的System Generator軟件來設計這部分模塊。
System Generator是Xilinx公司和Mathworks合作開發的FPGA輔助設計工具,只需在Simulink中完成模型的搭建,啟動System Generator,就能自動生成VHDL源程序及其他一些工程文件,并將系統模型映射到目標器件FPGA上進行硬件實現。
FIFO模塊
視頻信號進入FPGA的時鐘為13.5MHz,而USB接口芯片的時鐘為12MHz,兩者時鐘速率不匹配。這就出現了異步時序設計問題。由于需要進行跨時鐘領域的數據傳輸,必須在FPGA和EZ-USB之間加入緩沖數據單元。這個緩沖器一般由異步First-In-First-Out(FIFO)實現。異步FIFO在每個寫時鐘時寫入數據,而用每一個讀時鐘時讀出數據,這兩個時鐘是異步的。
FIFO的工作原理是:在寫時鐘的上升沿,當寫允許有效時,將寫數據總線上的數據寫入雙口RAM中寫地址對應的存儲單元中;而始終將讀地址對應的雙口RAM中的數據輸出到讀數據總線上,在讀允許有效時,輸出數據。
EZUSB模塊
在系統中,EZUSB2131主要完成兩方面的工作:完成對SAA7111A的配置和基于快速同步傳輸方式的數據傳輸。
為了使視頻解碼芯片SAA7111A正常工作,必須通過I2C總線對其內部的寄存器進行正確的配置。當通過I2C配置SAA7111A時,寫入數據格式為:首先為起始信號,然后是7位的從機地址和方向位(‘0’表示寫入SAA7111A寄存器,‘1’表示讀出相應寄存器)共8位數據,此時從機應該向主機發送一位響應信號。然后是從機中被寫入的寄存器的地址和從機的響應信號,然后才是要寫入子地址寄存器的的數據,是結束信號。
USB總線支持4種數據傳輸方式:控制傳輸、中斷傳輸、等時傳輸和塊傳輸。EZUSB系列的2131Q支持快速等時傳輸方式,為了提高數據傳輸的速度,應用這種方式進行數據傳輸,能夠使FPGA內部的FIFO模塊直接與EZUSB內部的數據總線通訊。
為了使用快速同步方式傳輸數據,需對2131進行如下設置:
(1)能使SOF中斷,使51內核能接受SOF中斷,從而保證1ms傳輸一楨數據。
(2)本系統使用了等時傳輸IN8端點,所以須設置INISOVAL為“00000001”。
(3)設置IN8端點將使用的等時FIFO的大小。為了加快數據傳輸的速度,這里設置該FIFO的大小為1024。
(4)設置寄存器PORTACFG,設置PA口第4位和第5位復用功能。其復用功能是快速等時傳輸的FRD和FWR信號。
(5)設置寄存器FASTXFR,使能快速等時傳輸方式,設置nFRD低電平有效,并且設置了nFRD的寬度和相位。
為了響應SOF中斷,需要在中斷響應函數ISR-Sof()中編寫數據處理程序,將數據傳送到內部寄存器IN8DATA,另一方面清除SOF中斷請求和USB中斷請求,以便程序能對下一個SOF做出正確的響應。
PC機應用程序
EZUSB通用驅動程序GPD(general purpose driver)用來和EZUSB外設接口的通用設備驅動程序,為應用程序訪問EZUSB硬件提供了途徑。EZUSB開發包提供了默認的驅動程序文件EZUSB。SYS。
對于應用程序而言,調用CreateFile()來打開設備并取得訪問設備驅動程序的句柄。用戶程序使用函數DeviceIoControl()來提交控制碼,并為CreateFile()函數返回的設備句柄設置I/O緩沖區。
連接到主機的EZUSB設備,GPD為其創建一個鏈接符。調用函數CreateFile(),實質上就是獲取驅動程序產生的目標設備句柄。EZUSB開發包中提供了I/O控制碼,使用這些I/O控制碼能非常方便地實現USB通訊。當使用快速傳輸方式時,需要將IOCTL_EZUSB_START_ISO_STREAM,IOCTL_EZUSB_READ_ISO_BUFFER,IOCTL_EZUSB_STOP_ISO_STREAM等控制碼提供給函數DeviceIoControl(),從而實現開啟等時傳輸、讀取等時傳輸數據、停止等時傳輸等功能。
結論
系統采用FPGA作為采集處理部分,可以提高系統處理的速度,大大增強系統的靈活性和適應性。具體表現為:
(1)系統性能得到大大提高。由于采用雙SRAM作為數據交換區,FPGA采用乒乓技術傳輸數據,提高了傳輸的速度。
(2)系統的適應性與靈活性強。由于采用FPGA可編程邏輯器件采集與處理數據,對于不同的視頻圖像信號,只要對FPGA邏輯稍作修改,便可實現信號采集。
(3)設計結構簡單,調試方便。
FPGA的外圍硬件電路簡單,在硬件設計中,可以大大地減小硬件設計的復雜程度。FPGA技術和USB的組合,數據處理能力得到了極大的提高,且有利于系統升級。本設計用于傳輸當前處理后的數據量已經足夠,采用EZUSB2131芯片已經可以完成。如果需要傳輸更大數據量,可以采用CPYRESS公司USB2.0芯片cy7c68013代替。該實例還可應用于實時數據采集、音頻及壓縮視頻數據傳輸等領域。