基于FPGA的高速圖像采集系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在低速的數(shù)據(jù)采集系統(tǒng)中,往往采用單片機(jī)或者DSP進(jìn)行控制;而對(duì)于圖像采集這種高速數(shù)據(jù)采集的場(chǎng)合,這種方案就不能滿足需要。因此這種方案極大浪費(fèi)了單片機(jī)或DSP的端口資源且靈活性差;若改用串口方式收集數(shù)據(jù),則一方面降低了數(shù)據(jù)采集的速度,另一方面極大地耗費(fèi)CPU的資源。本系統(tǒng)采用FPGA作為數(shù)據(jù)采集的主控單元,全部控制邏輯由硬件完成,速度快、成本低、靈活性強(qiáng)。為了增加緩沖功能,系統(tǒng)在FPGA外擴(kuò)展了256Mb的RAM,不僅增大了緩沖區(qū)容量,而且極大地降低了讀寫頻率,有效地減輕了上位機(jī)CPU的負(fù)擔(dān)。在圖像數(shù)據(jù)接口中,比較常見的是VGA、PCI—Express,而這些接口擴(kuò)展性差、成本高。本系統(tǒng)采用高速的USB接口作為與上位機(jī)通信的端口,速度快、易安裝、靈活性強(qiáng)。
1 系統(tǒng)框圖
系統(tǒng)框圖如圖1所示。FPGA控制單元采用A1tera公司Cyclone II系列的EP2C5F256C6,主要由4個(gè)部分組成——主控模塊、CMOS傳感器接口、RAM控制器以及EZ—USB接口控制器。傳感器接口負(fù)責(zé)完成SCCB時(shí)序控制,RAM控制器用于實(shí)現(xiàn)RAM讀寫與刷新操作的時(shí)序,USB接口模塊完成主控模塊與EZ—USB之間的數(shù)據(jù)讀寫;而主控模塊負(fù)責(zé)對(duì)從EZ—USB部分接收過(guò)來(lái)的上位機(jī)命令進(jìn)行解析,解析完命令后產(chǎn)生相應(yīng)的信號(hào)控制各個(gè)對(duì)應(yīng)模塊,如CMOS傳感器傳輸?shù)膱D像格式、RAM的讀寫方式、突發(fā)長(zhǎng)度等。
2 OV7620模塊設(shè)計(jì)
圖像傳感器采用OV7620,接口圖如圖2所示。該傳感器功能強(qiáng)大,提供多種數(shù)據(jù)格式的輸出,自動(dòng)消除白噪聲,白平衡、色彩飽和度、色調(diào)控制、窗口大小等均可通過(guò)內(nèi)部的SCCB控制線進(jìn)行設(shè)置。OV7620屬于CMOS彩色圖像傳感器。它支持連續(xù)和隔行兩種掃描方式,VGA與QVGA兩種圖像格式;最高像素為664×492,幀速率為30fps;數(shù)據(jù)格式包括YUV、YCrCb、RGB三種。0V7620支持SCCB設(shè)置模式和自動(dòng)加載默認(rèn)設(shè)置模式,其選擇由SCCB控制。本系統(tǒng)只需要支持SCCB模式,因此在設(shè)計(jì)的時(shí)候?qū)BB接地。上電后FP—GA通過(guò)SCCB總線對(duì)OV7620進(jìn)行設(shè)置,系統(tǒng)也可接受上位機(jī)發(fā)過(guò)來(lái)命令,設(shè)置其工作模式。SCCB總線時(shí)序類似于I2C總線時(shí)序,SIO一O相當(dāng)于SDA,SIO一1相當(dāng)于SCL。OV7620工作于從模式,在寫寄存器的過(guò)程中先發(fā)送OV7620的ID地址,然后發(fā)送寫數(shù)據(jù)的目的寄存器地址,最后發(fā)送要寫入的數(shù)據(jù)。
OV7620功能寄存器的地址為0x00~0x7C,通過(guò)設(shè)置相應(yīng)的寄存器,可以使它工作于不同的模式。例如,設(shè)置OV7620為連續(xù)掃描、RGB原始數(shù)據(jù)16位輸出方式,需要設(shè)置寄存器0x12、Oxl3、Ox20、Ox28分別為OX2D、0x01、Ox02、0x20。另外,圖像輸出的關(guān)鍵問(wèn)題是幀同步,VO7620傳感器中VSYNc、HSYNC、HREF、PCLK分別表示垂直同步、水平同步、參考信號(hào)和像素輸出同步,可以通過(guò)它們之間的配合使用,定位出每幀輸出圖像的起始位和結(jié)束位。
3 RAM時(shí)序控制模塊
RAM控制器接口主要用于實(shí)現(xiàn)RAM的基本操作時(shí)序,如充電(刷新)時(shí)序、模式設(shè)置時(shí)序、讀寫時(shí)序等。讀寫命令由主控模塊發(fā)出,由控制器具體執(zhí)行。系統(tǒng)采用Hy—nix公司的HY57V561620F(L)T(P),可實(shí)現(xiàn)256 Mb的大容量數(shù)據(jù)存儲(chǔ)。
時(shí)序控制器由一個(gè)有限狀態(tài)機(jī)(FSM)實(shí)現(xiàn),其狀態(tài)轉(zhuǎn)換圖如圖3所示。加電復(fù)位200μs后,對(duì)RAM的所有塊進(jìn)行預(yù)充電,充電操作的引腳電平如表1所列。充電完成后經(jīng)tRP刷新所有塊,延遲tRFC后進(jìn)入模式設(shè)置狀態(tài)。在模式設(shè)置狀態(tài)中,需要對(duì)RAS延遲、突發(fā)長(zhǎng)度等進(jìn)行設(shè)置,延遲tMRD后進(jìn)入空閑狀態(tài),等待主控單元的讀寫命令。在空閑狀態(tài)中,每隔64 ms需要對(duì)RAM中所有行刷新。在本設(shè)計(jì)中定時(shí)刷新模塊設(shè)計(jì)成一個(gè)計(jì)數(shù)器,計(jì)數(shù)脈沖選自控制器本身的時(shí)鐘。由于RAM要求兩次刷新的最大時(shí)間間隔不超過(guò)64 ms,假設(shè)系統(tǒng)的時(shí)鐘頻率為1O0MHz,則時(shí)鐘周期約為0.01μs,并且要在64 ms內(nèi)要完成全部8 192行的刷新,所以最大計(jì)數(shù)應(yīng)該為781次(64 ms/8192/0.01μs)。系統(tǒng)采用700次的計(jì)數(shù)脈沖產(chǎn)生刷新請(qǐng)求。
RAM控制器的讀寫地址與讀寫控制信號(hào)均由主控單元產(chǎn)生,主控單元結(jié)構(gòu)框圖如圖4所示。PLL用于產(chǎn)生RAM控制器和緩沖區(qū)的時(shí)鐘(系統(tǒng)設(shè)計(jì)為100 MHz);CMD命令解析模塊實(shí)現(xiàn)對(duì)上位機(jī)發(fā)送過(guò)來(lái)的命令解析并產(chǎn)生相應(yīng)的控制信號(hào),如CMOS傳感器控制、RAM突發(fā)長(zhǎng)度控制等。為了降低讀寫RAM的頻率,系統(tǒng)設(shè)計(jì)了一個(gè)8×16位的FIFO。當(dāng)8個(gè)像素的數(shù)據(jù)存入FIFO后,F(xiàn)IFO向RAM控制器發(fā)送寫請(qǐng)求(W_req);與此同時(shí),寫地址發(fā)生器產(chǎn)生寫地址,由RAM控制器產(chǎn)生寫數(shù)據(jù)的時(shí)序。讀寫地址發(fā)生器是一個(gè)遞增的計(jì)數(shù)器,每次的讀寫地址是上次的地址加BL(突發(fā)長(zhǎng)度)。由于PCLK的最高頻率可達(dá)9.2 MHz(640×480×30),而RAM的時(shí)鐘頻率是100 MHz,每次寫入一個(gè)像素的數(shù)據(jù)需要5個(gè)時(shí)鐘周期(考慮RAS延遲),這樣寫操作耗費(fèi)整個(gè)時(shí)鐘周期的50%;加入FIF0后,讀寫的突發(fā)長(zhǎng)度均是8,可降低耗費(fèi)的時(shí)鐘周期至10%左右。
4 EZ—USB傳輸控制器
CY7C68013是Cypress公司的EZ—USB FX2系列芯片,引腳連接圖如圖5所示。該系列芯片集成了USB2.O收發(fā)器、串行接口引擎(SIE)、帶8.5 KB片上RAM的增強(qiáng)型8501、16 KB的RAM、4 KB的FIFO存儲(chǔ)器、I/O口、數(shù)據(jù)總線、地址總線和通用可編程接口(GPIF);共有3種接口模式——端口模式、從屬FIFO接口模式和GPIF接口模式。在端口模式下,所有I/O引腳都可作為805l的通用I/O口,作為最基本的數(shù)據(jù)傳輸模式,其數(shù)據(jù)傳輸主要由固件程序完成,需要CPU的參與,因此數(shù)據(jù)傳輸速率比較低。在從屬FIFO接口模式下,外部邏輯或外部處理器可以直接與FX2端點(diǎn)FIFO相連。GPIF接口模式使用PORTB和PORTD構(gòu)成通向4個(gè)FX2端點(diǎn)FIF0(EP2、EP4、EP6和EP8)的16位數(shù)據(jù)接口。GPIF作為內(nèi)部的主控制器與FIFO直接相連,并產(chǎn)生用戶可編程的控制信號(hào)與外部接口進(jìn)行通信。后兩種模式數(shù)據(jù)的傳輸通過(guò)執(zhí)行USB本身的協(xié)議來(lái)完成,微處理器不參與數(shù)據(jù)傳輸,從而使數(shù)據(jù)的傳輸速率大大地提高。
本方案采用從FIFO方式,由FPGA提供讀寫時(shí)鐘,EZ—USB的CPU不參與數(shù)據(jù)傳輸。其中端點(diǎn)FIFO相當(dāng)于FPGA的外部RAM,數(shù)據(jù)的讀寫分別由讀寫控制器完成。如果數(shù)據(jù)從EZ_USB讀入到FPGA中,首先要檢測(cè)CON控制線的狀態(tài),若有數(shù)據(jù)要讀,分配FIFOADR=00,使FIFO指針指向輸出端點(diǎn),使能SLOE使之?dāng)?shù)據(jù)輸出,然后采樣數(shù)據(jù)線上的數(shù)據(jù),讀得的數(shù)據(jù)送入命令解析模塊解析;如果是數(shù)據(jù)從FPGA寫入到EZ_USB中,則設(shè)置FIFOADR使之指向輸入端點(diǎn),拉低SLWR,將內(nèi)部數(shù)據(jù)總線接到外部數(shù)據(jù)總線上,這樣就完成了一次數(shù)據(jù)的寫入。
除上述設(shè)計(jì)外還需要對(duì)EZ_USB模塊本身進(jìn)行設(shè)置,這部分屬于固件開發(fā)部分。Cypress公司為固件開發(fā)提供了一個(gè)固件庫(kù)和固件框架,都是在集成開發(fā)環(huán)境下開發(fā)的,固件庫(kù)提供了一些常量、數(shù)據(jù)結(jié)構(gòu)和函數(shù)來(lái)簡(jiǎn)化用戶對(duì)芯片的使用。將代碼在Keil C51環(huán)境中進(jìn)行編譯;編譯通過(guò)后,將固件代碼下載到單片機(jī)中。這部分主要完成相關(guān)寄存器的設(shè)置和波形文件的編寫。
結(jié) 語(yǔ)
通過(guò)以上設(shè)計(jì)很好地解決了高速數(shù)據(jù)在采樣、傳輸過(guò)程中的瓶頸,并以很短的時(shí)延真正實(shí)現(xiàn)了高速圖像數(shù)據(jù)的采集。由于其低成本、易安裝的特性,擁有廣闊的市場(chǎng)前景,可以應(yīng)用于電話會(huì)議、遠(yuǎn)程醫(yī)療和遠(yuǎn)程教學(xué)等需要高清圖像傳輸?shù)念I(lǐng)域。本設(shè)計(jì)的創(chuàng)新點(diǎn)在于,它適應(yīng)了不同的圖像數(shù)據(jù)的應(yīng)用需求,實(shí)現(xiàn)了多種速率的讀寫模式,可以是實(shí)時(shí)的突發(fā)長(zhǎng)度讀寫和高速的全頁(yè)讀寫。