劉 攀,王紅亮,孟令軍
(中北大學(xué) 儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室;電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051)
構(gòu)建了一種基于FPGA的數(shù)字圖像采集存儲(chǔ)系統(tǒng),它主要由FPGA、USB單片機(jī)、CMOS圖像傳感器和大容量Flash構(gòu)成。該系統(tǒng)具有通用性好、成本低等優(yōu)點(diǎn)。
數(shù)字圖像采集存儲(chǔ)系統(tǒng)主要完成數(shù)字圖像采集存儲(chǔ)和實(shí)時(shí)顯示兩大功能。系統(tǒng)硬件主要有數(shù)字圖像采集模塊、FPGA邏輯控制模塊、Flash存儲(chǔ)模塊、CY7C68013數(shù)據(jù)讀取實(shí)時(shí)顯示模塊(獨(dú)立)。當(dāng)系統(tǒng)沒有數(shù)據(jù)讀取模塊時(shí),可以完成圖像的采集存儲(chǔ)。當(dāng)連接數(shù)據(jù)讀取模塊時(shí),可以完成Flash存儲(chǔ)器內(nèi)部圖像數(shù)據(jù)的讀取以及對(duì)CMOS圖像傳感器實(shí)時(shí)捕獲的圖像進(jìn)行顯示存儲(chǔ)的功能。數(shù)字圖像采集存儲(chǔ)系統(tǒng)組成框圖如圖1所示。
本系統(tǒng)采用OmniVision公司生產(chǎn)的OV7660數(shù)字?jǐn)z像頭模組。OV7660集成了SCCB控制接口用以訪問片內(nèi)寄存器。SCCB接口是OmniVision公司制定的一種用于控制圖像傳感器的總線 (SIO_C,SIO_D)。SIO_C和SIO_D在功能及使用上與I2C總線兼容。因此,通過FPGA模擬I2C完成對(duì)攝像頭的配置[1]。
OV7660內(nèi)部共有165個(gè)控制寄存器,可通過配置這些控制寄存器來(lái)設(shè)定和實(shí)現(xiàn)OV7660的各種功能。OV7660寫寄存器的設(shè)備地址為0x42,讀寄存器設(shè)備地址為0x43。本設(shè)計(jì)中OV7660的功能是采集模擬視頻信號(hào),并以12 MHz的時(shí)鐘頻率進(jìn)行A/D轉(zhuǎn)換,輸出8 bit寬、格式為YCbCr4∶2∶2的數(shù)字信號(hào)。在此要求下,只要對(duì)OV7660的部分寄存器進(jìn)行配置即可,其余的寄存器均為系統(tǒng)復(fù)位以后的缺省值。關(guān)鍵寄存器配置見表1。
綜合考慮采集速率和圖像的連貫性,將CMOS圖像傳感器配置為QVGA工作模式,通過寄存器參數(shù)配置,將PCLK配置為 4 MHz。成功配置后產(chǎn)生 VSYNC,HREF,PCLK 3種同步信號(hào),分別為場(chǎng)同步輸出信號(hào),行同步輸出信號(hào)和用來(lái)鎖存有效數(shù)據(jù)的時(shí)鐘,即像素時(shí)鐘。這3種同步信號(hào)作為圖像數(shù)據(jù)獲取、傳輸?shù)臓顟B(tài)信號(hào),是整個(gè)采集存儲(chǔ)系統(tǒng)的重點(diǎn)。
表1 OV7660關(guān)鍵寄存器配置參數(shù)
三星公司生產(chǎn)的K9NBG08U5A具有4 Gbyte容量,相當(dāng)于 4 片 1 Gbyte 的Flash[2](K9K8G08U0A),因此,在對(duì)其讀、寫、擦除的時(shí)候,都要考慮其內(nèi)部片選切換和對(duì)應(yīng)R/B信號(hào)的判斷,但是,對(duì)每片的基本操作和1 Gbyte的Flash都相同。大容量的Flash保證系統(tǒng)完成長(zhǎng)時(shí)間的數(shù)據(jù)采集。
為了保證一幀數(shù)據(jù)的完整性,系統(tǒng)在收到開始采集命令后在VSYNC場(chǎng)同步的下降沿到來(lái)之后才開始采集存儲(chǔ)工作。HREF行同步信號(hào)為高期間CMOS圖像傳感器輸出的數(shù)據(jù)才有效,因此,將HREF與PCLK做與處理,再與場(chǎng)同步信號(hào)做或處理作為FPGA內(nèi)部FIFO的寫信號(hào)。FIFO為FPGA內(nèi)部擴(kuò)展,用來(lái)作為數(shù)據(jù)緩沖和時(shí)序的匹配,當(dāng)FIFO半滿后就會(huì)從中讀取數(shù)據(jù)并寫入Flash中。CMOS圖像傳感器成功配置為QVGA(320×240)模式后輸出時(shí)序信號(hào)如圖2所示。
數(shù)據(jù)輸出格式為 QVGA(320×240),每行 320 個(gè)像素點(diǎn),640 byte。圖像數(shù)據(jù)實(shí)際輸出速率為4 Mbyte/s,即像素時(shí)鐘 PCLK 為 4 MHz,每幀 QVGA(320×240)圖像大小為320×240×2=150 Kbyte。得到的幀率理論值為27.3幀/秒(f/s),保證了視頻的連貫性。要求存儲(chǔ)器存儲(chǔ)速度也要高于4 Mbyte/s才能保證不丟幀。實(shí)際應(yīng)用中經(jīng)過測(cè)試,F(xiàn)lash存儲(chǔ)速度完全可以達(dá)到4 Mbyte/s,滿足系統(tǒng)要求。
系統(tǒng)預(yù)留接口電路,可以通過計(jì)算機(jī)應(yīng)用軟件來(lái)控制從CMOS圖像傳感器獲得的圖像的實(shí)時(shí)讀取、存儲(chǔ)、顯示,以及存儲(chǔ)器中圖像數(shù)據(jù)的讀取及播放。
實(shí)際應(yīng)用中存儲(chǔ)器數(shù)據(jù)讀取速度受限于存儲(chǔ)器本身和CY7C68013內(nèi)部的USB2.0的速度。由于存儲(chǔ)器數(shù)據(jù)量大,為了提高效率,完成數(shù)據(jù)讀取,CY7C68013芯片采用通用可編程接口(GPIF)數(shù)據(jù)讀取方式。
GPIF是一個(gè)對(duì)于FX2端點(diǎn)FIFO的內(nèi)部主控制器[3],它代替了外部的“膠合”邏輯電路,如果沒有GPIF,則在FX2與外界之間必須建立接口電路。FX2固件程序能夠分配FIFO讀和寫波形到4個(gè)FIFO中的任何一個(gè),并且GPIF將向外界接口產(chǎn)生正確的選通信號(hào),外界接口用于對(duì)FIFO數(shù)據(jù)的傳進(jìn)傳出。
在數(shù)據(jù)讀取過程中充分利用FPGA的可編程特性[4],通過擴(kuò)展的1 Kbyte的FIFO來(lái)匹配時(shí)序完成數(shù)據(jù)的讀取,F(xiàn)PGA在收到讀指令后,首先從Flash中讀取數(shù)據(jù)并寫入其內(nèi)部FIFO,并一直判斷FIFO的滿信號(hào),當(dāng)FIFO未滿則一直寫數(shù)據(jù)到FIFO,否則停止,保證數(shù)據(jù)不丟失。CY7C68013芯片端點(diǎn)FIFO的內(nèi)部主控制器收到外部提供的握手信號(hào)(RDY0)變低后,GPIF也將產(chǎn)生CTL0的讀FIFO信號(hào),且當(dāng)CY7C68013芯片內(nèi)部FIFO數(shù)據(jù)滿512 byte則自動(dòng)打包上傳,當(dāng)握手信號(hào)(RDY0)變高,即FIFO為空時(shí)則停止讀取數(shù)據(jù)。如此循環(huán),直至完成數(shù)據(jù)的讀取操作。
經(jīng)過測(cè)試,完成6 Mbyte/s的數(shù)據(jù)讀取速度,實(shí)驗(yàn)測(cè)試發(fā)現(xiàn),將FPGA工作時(shí)鐘由20 MHz提高到40 MHz,數(shù)據(jù)讀取速度并沒有改變,可以證明6 Mbyte/s已經(jīng)達(dá)到了存儲(chǔ)器的數(shù)據(jù)最大輸出速率,通過分析Flash存儲(chǔ)器讀時(shí)序各個(gè)狀態(tài)建立和保持時(shí)間,發(fā)現(xiàn)實(shí)驗(yàn)結(jié)果與理論分析相符。
為了實(shí)現(xiàn)數(shù)字圖像的實(shí)時(shí)傳輸,必須解決影響實(shí)時(shí)傳輸?shù)膸状笠蛩兀阂皇怯?jì)算機(jī)中應(yīng)用軟件接收?qǐng)D像、處理并顯示圖像的速度;二是CMOS圖像傳感器與CY7C68013的FIFO緩沖區(qū)之間的傳輸速度;三是CY7C68013內(nèi)部的USB2.0與帶有USB2.0接口計(jì)算機(jī)之間的傳輸速度。針對(duì)這3個(gè)關(guān)鍵因素都采取了相應(yīng)的解決方法。
計(jì)算機(jī)中應(yīng)用軟件接收?qǐng)D像、處理并顯示圖像采用MFC開發(fā),以人機(jī)交互界面為主體,通過優(yōu)化代碼,采用多線程的方法,合理分配系統(tǒng)時(shí)間,確定優(yōu)先級(jí),完成實(shí)時(shí)圖像數(shù)據(jù)的讀取、存儲(chǔ)、顯示。計(jì)算機(jī)應(yīng)用軟件主要用途有:1)建立與外設(shè)的連接,發(fā)現(xiàn)USB設(shè)備,通過USB向圖像采集設(shè)備發(fā)送指令并進(jìn)行圖像數(shù)據(jù)的實(shí)時(shí)采集存儲(chǔ);2)對(duì)從USB傳輸來(lái)的圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)讀取、顯示;3)讀取Flash存儲(chǔ)器中的圖像數(shù)據(jù)。
筆者采用由Cypress公司生產(chǎn)的EZ-USB FX2系列芯片中的CY7C68013芯片,該芯片是針對(duì)USB2.0的,它支持 2 種傳輸速率:全速(full speed)12 Mbit/s,高速(high speed)480 Mbit/s。實(shí)時(shí)數(shù)據(jù)傳輸要求CY7C68013芯片數(shù)據(jù)傳輸速率高于6 Mbyte/s,因此,將數(shù)據(jù)傳輸模式配置為高速(high speed)480 Mbit/s模式,保證數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性。實(shí)時(shí)上傳CMOS圖像傳感器捕獲的圖像數(shù)據(jù)與存儲(chǔ)器數(shù)據(jù)讀取方式一樣。其速率通過實(shí)時(shí)傳輸實(shí)驗(yàn)驗(yàn)證了圖像的連貫性。
通過采集存儲(chǔ)實(shí)驗(yàn)和實(shí)時(shí)顯示實(shí)驗(yàn),驗(yàn)證了該系統(tǒng)的可行性和實(shí)時(shí)性。圖3是從實(shí)時(shí)顯示實(shí)驗(yàn)中捕獲的單幀圖片。
數(shù)字圖像采集系統(tǒng)采用FPGA作為采集控制部分,優(yōu)勢(shì)有:
1)由于FPGA專門負(fù)責(zé)采集存儲(chǔ)控制部分的實(shí)現(xiàn),降低成本,增加了編程的靈活性。
2)設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單,調(diào)試方便。FPGA的外圍硬件電路簡(jiǎn)單,可以減小硬件設(shè)計(jì)的復(fù)雜程度。FPGA的時(shí)序邏輯調(diào)試可在軟件上仿真實(shí)現(xiàn),因而大大降低硬件調(diào)試難度。
3)系統(tǒng)具有獨(dú)立性,可以獨(dú)立完成數(shù)字圖像的采集存儲(chǔ),不需要計(jì)算機(jī)的控制。
4)通過對(duì)系統(tǒng)添加視頻壓縮模塊,可以實(shí)現(xiàn)更長(zhǎng)時(shí)間視頻信息的采集存儲(chǔ),作為運(yùn)動(dòng)目標(biāo)檢測(cè)跟蹤硬件系統(tǒng)在圖像捕獲模塊中已經(jīng)得到應(yīng)用。
[1]馬利剛,馬鐵華.基于FPGA的實(shí)時(shí)圖像采集系統(tǒng)設(shè)計(jì)[J].計(jì)量與測(cè)試技術(shù),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單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2007.
[4]譚樹人,張茂軍,徐偉.多傳感器同步圖像采集系統(tǒng)的設(shè)計(jì)[J].電視技術(shù),2006,30(9):84-87.