劉 攀,王紅亮,孟令軍
(中北大學 儀器科學與動態測試教育部重點實驗室;電子測試技術國家重點實驗室,山西 太原 030051)
構建了一種基于FPGA的數字圖像采集存儲系統,它主要由FPGA、USB單片機、CMOS圖像傳感器和大容量Flash構成。該系統具有通用性好、成本低等優點。
數字圖像采集存儲系統主要完成數字圖像采集存儲和實時顯示兩大功能。系統硬件主要有數字圖像采集模塊、FPGA邏輯控制模塊、Flash存儲模塊、CY7C68013數據讀取實時顯示模塊(獨立)。當系統沒有數據讀取模塊時,可以完成圖像的采集存儲。當連接數據讀取模塊時,可以完成Flash存儲器內部圖像數據的讀取以及對CMOS圖像傳感器實時捕獲的圖像進行顯示存儲的功能。數字圖像采集存儲系統組成框圖如圖1所示。
本系統采用OmniVision公司生產的OV7660數字攝像頭模組。OV7660集成了SCCB控制接口用以訪問片內寄存器。SCCB接口是OmniVision公司制定的一種用于控制圖像傳感器的總線 (SIO_C,SIO_D)。SIO_C和SIO_D在功能及使用上與I2C總線兼容。因此,通過FPGA模擬I2C完成對攝像頭的配置[1]。

OV7660內部共有165個控制寄存器,可通過配置這些控制寄存器來設定和實現OV7660的各種功能。OV7660寫寄存器的設備地址為0x42,讀寄存器設備地址為0x43。本設計中OV7660的功能是采集模擬視頻信號,并以12 MHz的時鐘頻率進行A/D轉換,輸出8 bit寬、格式為YCbCr4∶2∶2的數字信號。在此要求下,只要對OV7660的部分寄存器進行配置即可,其余的寄存器均為系統復位以后的缺省值。關鍵寄存器配置見表1。
綜合考慮采集速率和圖像的連貫性,將CMOS圖像傳感器配置為QVGA工作模式,通過寄存器參數配置,將PCLK配置為 4 MHz。成功配置后產生 VSYNC,HREF,PCLK 3種同步信號,分別為場同步輸出信號,行同步輸出信號和用來鎖存有效數據的時鐘,即像素時鐘。這3種同步信號作為圖像數據獲取、傳輸的狀態信號,是整個采集存儲系統的重點。

表1 OV7660關鍵寄存器配置參數
三星公司生產的K9NBG08U5A具有4 Gbyte容量,相當于 4 片 1 Gbyte 的Flash[2](K9K8G08U0A),因此,在對其讀、寫、擦除的時候,都要考慮其內部片選切換和對應R/B信號的判斷,但是,對每片的基本操作和1 Gbyte的Flash都相同。大容量的Flash保證系統完成長時間的數據采集。
為了保證一幀數據的完整性,系統在收到開始采集命令后在VSYNC場同步的下降沿到來之后才開始采集存儲工作。HREF行同步信號為高期間CMOS圖像傳感器輸出的數據才有效,因此,將HREF與PCLK做與處理,再與場同步信號做或處理作為FPGA內部FIFO的寫信號。FIFO為FPGA內部擴展,用來作為數據緩沖和時序的匹配,當FIFO半滿后就會從中讀取數據并寫入Flash中。CMOS圖像傳感器成功配置為QVGA(320×240)模式后輸出時序信號如圖2所示。

數據輸出格式為 QVGA(320×240),每行 320 個像素點,640 byte。圖像數據實際輸出速率為4 Mbyte/s,即像素時鐘 PCLK 為 4 MHz,每幀 QVGA(320×240)圖像大小為320×240×2=150 Kbyte。得到的幀率理論值為27.3幀/秒(f/s),保證了視頻的連貫性。要求存儲器存儲速度也要高于4 Mbyte/s才能保證不丟幀。實際應用中經過測試,Flash存儲速度完全可以達到4 Mbyte/s,滿足系統要求。
系統預留接口電路,可以通過計算機應用軟件來控制從CMOS圖像傳感器獲得的圖像的實時讀取、存儲、顯示,以及存儲器中圖像數據的讀取及播放。
實際應用中存儲器數據讀取速度受限于存儲器本身和CY7C68013內部的USB2.0的速度。由于存儲器數據量大,為了提高效率,完成數據讀取,CY7C68013芯片采用通用可編程接口(GPIF)數據讀取方式。
GPIF是一個對于FX2端點FIFO的內部主控制器[3],它代替了外部的“膠合”邏輯電路,如果沒有GPIF,則在FX2與外界之間必須建立接口電路。FX2固件程序能夠分配FIFO讀和寫波形到4個FIFO中的任何一個,并且GPIF將向外界接口產生正確的選通信號,外界接口用于對FIFO數據的傳進傳出。
在數據讀取過程中充分利用FPGA的可編程特性[4],通過擴展的1 Kbyte的FIFO來匹配時序完成數據的讀取,FPGA在收到讀指令后,首先從Flash中讀取數據并寫入其內部FIFO,并一直判斷FIFO的滿信號,當FIFO未滿則一直寫數據到FIFO,否則停止,保證數據不丟失。CY7C68013芯片端點FIFO的內部主控制器收到外部提供的握手信號(RDY0)變低后,GPIF也將產生CTL0的讀FIFO信號,且當CY7C68013芯片內部FIFO數據滿512 byte則自動打包上傳,當握手信號(RDY0)變高,即FIFO為空時則停止讀取數據。如此循環,直至完成數據的讀取操作。
經過測試,完成6 Mbyte/s的數據讀取速度,實驗測試發現,將FPGA工作時鐘由20 MHz提高到40 MHz,數據讀取速度并沒有改變,可以證明6 Mbyte/s已經達到了存儲器的數據最大輸出速率,通過分析Flash存儲器讀時序各個狀態建立和保持時間,發現實驗結果與理論分析相符。
為了實現數字圖像的實時傳輸,必須解決影響實時傳輸的幾大因素:一是計算機中應用軟件接收圖像、處理并顯示圖像的速度;二是CMOS圖像傳感器與CY7C68013的FIFO緩沖區之間的傳輸速度;三是CY7C68013內部的USB2.0與帶有USB2.0接口計算機之間的傳輸速度。針對這3個關鍵因素都采取了相應的解決方法。
計算機中應用軟件接收圖像、處理并顯示圖像采用MFC開發,以人機交互界面為主體,通過優化代碼,采用多線程的方法,合理分配系統時間,確定優先級,完成實時圖像數據的讀取、存儲、顯示。計算機應用軟件主要用途有:1)建立與外設的連接,發現USB設備,通過USB向圖像采集設備發送指令并進行圖像數據的實時采集存儲;2)對從USB傳輸來的圖像數據進行實時讀取、顯示;3)讀取Flash存儲器中的圖像數據。
筆者采用由Cypress公司生產的EZ-USB FX2系列芯片中的CY7C68013芯片,該芯片是針對USB2.0的,它支持 2 種傳輸速率:全速(full speed)12 Mbit/s,高速(high speed)480 Mbit/s。實時數據傳輸要求CY7C68013芯片數據傳輸速率高于6 Mbyte/s,因此,將數據傳輸模式配置為高速(high speed)480 Mbit/s模式,保證數據傳輸的實時性。實時上傳CMOS圖像傳感器捕獲的圖像數據與存儲器數據讀取方式一樣。其速率通過實時傳輸實驗驗證了圖像的連貫性。
通過采集存儲實驗和實時顯示實驗,驗證了該系統的可行性和實時性。圖3是從實時顯示實驗中捕獲的單幀圖片。

數字圖像采集系統采用FPGA作為采集控制部分,優勢有:
1)由于FPGA專門負責采集存儲控制部分的實現,降低成本,增加了編程的靈活性。
2)設計結構簡單,調試方便。FPGA的外圍硬件電路簡單,可以減小硬件設計的復雜程度。FPGA的時序邏輯調試可在軟件上仿真實現,因而大大降低硬件調試難度。
3)系統具有獨立性,可以獨立完成數字圖像的采集存儲,不需要計算機的控制。
4)通過對系統添加視頻壓縮模塊,可以實現更長時間視頻信息的采集存儲,作為運動目標檢測跟蹤硬件系統在圖像捕獲模塊中已經得到應用。
[1]馬利剛,馬鐵華.基于FPGA的實時圖像采集系統設計[J].計量與測試技術,2009(12):51-56.
[2]Samsung Semiconductor.K9NBG08U5A datasheet[EB/OL].[2010-01-20].http://www.alldatasheet.net/datasheet-pdf/pdf/170554/SAMSUNG/K9NBG08U5A.html.
[3]錢峰.EZ_USB FX2單片機原理、編程及應用[M].北京:北京航空航天大學出版社,2007.
[4]譚樹人,張茂軍,徐偉.多傳感器同步圖像采集系統的設計[J].電視技術,2006,30(9):84-87.