摘 要: 結(jié)合FPGA高速并行、重配置靈活和實(shí)時(shí)圖像處理中數(shù)據(jù)吞吐量大、運(yùn)算速率要求高的特點(diǎn),設(shè)計(jì)了一種基于FPGA的實(shí)時(shí)圖像處理實(shí)驗(yàn)平臺(tái)。該平臺(tái)結(jié)構(gòu)簡(jiǎn)單、擴(kuò)展性較好,無(wú)需修改前端采集和終端顯示模塊,即可實(shí)現(xiàn)實(shí)時(shí)圖像處理的算法驗(yàn)證,適用于相關(guān)人員利用FPGA來(lái)進(jìn)行視頻圖像處理。
關(guān)鍵詞: 現(xiàn)場(chǎng)可編程門(mén)陣列;視頻圖像處理;硬件描述語(yǔ)言
現(xiàn)場(chǎng)可編程門(mén)陣列FPGA(Field-Programmable Gate Array)是目前應(yīng)用十分廣泛的一種現(xiàn)場(chǎng)可編程邏輯器件,其性能優(yōu)越,資源豐富,采用并行處理方式,在數(shù)字信號(hào)處理領(lǐng)域具有很大的優(yōu)勢(shì)。數(shù)字圖像處理技術(shù)應(yīng)用廣泛,目前處理算法通常是由軟件串行計(jì)算來(lái)完成,但由于實(shí)時(shí)圖像數(shù)據(jù)量大,對(duì)于處理運(yùn)算的速度要求高,因此利用FPGA來(lái)對(duì)實(shí)時(shí)圖像進(jìn)行硬件處理成為一個(gè)新的發(fā)展趨勢(shì)。本文介紹了一種采用CMOS攝像頭作為視頻源輸入,SDRAM作為幀緩沖器,F(xiàn)PGA作為主控器和圖像處理模塊,ADV7123作為視頻D/A轉(zhuǎn)換器,UART和VGA作為輸入輸出接口的系統(tǒng)設(shè)計(jì)方案,對(duì)相關(guān)設(shè)計(jì)人員具有一定的參考價(jià)值。
1 實(shí)時(shí)圖像處理實(shí)驗(yàn)平臺(tái)架構(gòu)
本系統(tǒng)由視頻采集模塊、幀緩存模塊(處理前)、圖像處理模塊、幀緩存模塊(處理后)、視頻顯示模塊以及調(diào)試配置模塊組成。處理流程如下:FPGA上電配置后,利用SCCB通信協(xié)議對(duì)視頻采集單元OV7670進(jìn)行功能配置并捕獲視頻流,緩存到幀緩存模塊;配置調(diào)試模塊利用UART對(duì)參數(shù)配置寄存器進(jìn)行設(shè)置;FPGA圖像處理模塊讀取參數(shù)配置寄存器的值并從幀緩存模塊(處理前)中讀取圖像進(jìn)行處理,處理完后緩存到幀緩存模塊(處理后);視頻顯示模塊從幀緩存模塊(處理后)中讀取圖像送到ADV7123并根據(jù)VGA協(xié)議送出相應(yīng)的行同步和場(chǎng)同步信號(hào),實(shí)現(xiàn)實(shí)時(shí)圖像處理后的顯示。系統(tǒng)結(jié)構(gòu)設(shè)計(jì)如圖1所示。
2 視頻采集模塊
2.1 CMOS攝像頭OV7670
本設(shè)計(jì)中采用的是OmniVison公司生產(chǎn)的CMOS圖像傳感器OV7670。圖像傳感器陣列為656×488(320 128像素),有效的為640×480(307 200像素),輸出格式有YUV(4∶2∶2)、YCbCr(4∶2∶2)、RGB(GRB4∶2∶2,RGB565/555/444)、Raw RGB,圖像尺寸支持VGA、CIF以及從CIF縮放至40×30的任意尺寸,標(biāo)準(zhǔn)的SCCB接口,兼容I2C接口。
2.2 SCCB通信控制
SCCB(Serial Camera Control Bus)是OmniVision公司定義的一種3線的總線,它由SCCB_E、SIO_C和SIO_D組成。為減少芯片引腳,縮減為兩根線,即SIO_C和SIO_D。
在進(jìn)行讀寫(xiě)操作前后,需要有起始和終止信號(hào)。當(dāng)SIO_C為高電平時(shí),SIO_D出現(xiàn)下降沿跳變代表操作開(kāi)始,上升沿跳變代表操作結(jié)束,而在具體數(shù)據(jù)傳輸過(guò)程中,只有當(dāng)SIO_C為低電平時(shí),SIO_D才可以變化。起始信號(hào)產(chǎn)生的實(shí)現(xiàn)如下。
0:begin
done<=1′b0;isout<=1′b1;sclk<=1′b1;
if(cnt==0)sdata<=1′b1;
else if(cnt==SCCB_SPEED_HALF)sdata<=1′b0;
if(cnt==SCCB_SPEED-1)begin state<=state+1′b1;cnt<=16′d0;sclk<=1′b0;end
else cnt<=cnt+1′b1;end
done<=0代表操作開(kāi)始;isout<=1是將SIO_D設(shè)置為FPGA輸出;sclk<=1是將SIO_C拉到高電平;state是狀態(tài)機(jī)標(biāo)識(shí);cnt是一個(gè)計(jì)數(shù)器,用來(lái)對(duì)25 MHz的輸入時(shí)鐘記數(shù),利用cnt可以形成100 kHz的工作時(shí)序;在0 ?滋s~5 ?滋s內(nèi)SIO_D為高電平,5 ?滋s~10 ?滋s內(nèi)SIO_D為低電平,而SIO_C一直保持為高電平。需要注意的是,在起始信號(hào)的最后一個(gè)時(shí)鐘周期,將SIO_C拉到低電平是為了下一個(gè)狀態(tài)即寫(xiě)設(shè)備地址時(shí)保證SIO_C為低。
讀寫(xiě)操作由幾個(gè)步驟組成,每個(gè)步驟包括8 bit串行數(shù)據(jù)(MSB優(yōu)先)和1 bit X(Don′t care bit)或NA。寫(xiě)操作由3步構(gòu)成,先寫(xiě)設(shè)備地址,再寫(xiě)寄存器地址,最后寫(xiě)寄存器的值。讀操作由4步或5步構(gòu)成,因?yàn)樽x周期只有兩個(gè)階段,無(wú)法確定寄存器的地址,所以在此之前需要有兩個(gè)階段或者3個(gè)階段的寫(xiě)操作。需要注意的是,在讀周期結(jié)束時(shí)主機(jī)需要將NA拉高。本系統(tǒng)中采用的是4步讀,OV7670的設(shè)備地址為0x42,最后一位用來(lái)判斷讀寫(xiě),所以讀的時(shí)候?yàn)?x43。圖2是用邏輯分析儀捕獲到寫(xiě)、讀時(shí)序。
由圖可知,寫(xiě)操作由起始信號(hào)、8′h42、1′b0、8′h1e、1′b0、8′h1f、1′b0和結(jié)束信號(hào)組成;而隨后的讀操作由起始信號(hào)、8′h42、1′b0、8′h1e、1′b0、結(jié)束信號(hào)、起始信號(hào)、8′h43、1′b0、8′h1f、1′b1、結(jié)束信號(hào)組成。整體功能是對(duì)0x1e寄存器寫(xiě)0x1f,隨后從0x1e寄存器中讀出數(shù)據(jù)0x1f,跟寫(xiě)入的數(shù)據(jù)一致,即SCCB讀寫(xiě)功能正常。
2.3 CMOS圖像捕獲
設(shè)置好OV7670的工作模式后,就可以對(duì)圖像進(jìn)行捕獲了。本系統(tǒng)配置的是VGA 30FPS,分辨率為640×480,輸出格式為RGB565。要捕獲圖像數(shù)據(jù),只需要在VSYNC為0,HREF為1,PCLK上升沿時(shí)對(duì)D[7:0]進(jìn)行采樣即可,具體實(shí)現(xiàn)如下。
if(!i_vsync && i_href && i_start)begin
if(i==0)begin rgb565_buf[7:0]<=i_data[7:0];o_valid<=0;end
else begin o_rgb565[15:0]<={rgb565_buf[7:0],i_data[7:0]};o_valid<=1;end
i<=~i;
end else o_valid<=0;
圖像捕獲單元直接把RGB565的信號(hào)輸出到異步FIFO中緩存,需要注意的是,這里需要根據(jù)VSYNC信號(hào)從一幀的起始來(lái)進(jìn)行圖像的緩存,否則緩存到幀緩沖區(qū)的圖像數(shù)據(jù)會(huì)出錯(cuò)。
3 幀緩存模塊(處理前,處理后)
幀緩存模塊(處理前)完成從異步FIFO中讀取圖像數(shù)據(jù),并實(shí)現(xiàn)幀緩存的功能。當(dāng)圖像處理模塊需要圖像數(shù)據(jù)進(jìn)行處理時(shí),可以通過(guò)FIFO獲取幀緩存中的圖像數(shù)據(jù)。幀緩存由SDRAM和FPGA內(nèi)部的SDRAM控制器實(shí)現(xiàn)。
SDRAM選用的是韓國(guó)三星公司生產(chǎn)的K4S641632K-UC60,刷新周期為64 ms,CAS latency設(shè)置為3和2時(shí),最高可達(dá)166 MHz和100 MHz工作頻率。本系統(tǒng)設(shè)置CL為3,工作頻率為100 MHz。SDRAM控制器由FPGA實(shí)現(xiàn),主要完成對(duì)SDRAM的初始化以及讀、寫(xiě)和自動(dòng)刷新操作。SDRAM初始化包括4階段:(1)上電保持時(shí)鐘穩(wěn)定,空指令200 ?滋s以上;(2)對(duì)所有的Bank進(jìn)行預(yù)充電;(3)8個(gè)以上自動(dòng)刷新命令;(4)模式寄存器設(shè)置命令。
初始化如圖3所示,其中TRP為40 ns(4 cycles),TRFC為80 ns(8 cycles),TMRD為50 ns(5 cycles),BL為8 Words,BT為sequential,CL為3 cycles,OP為burst write & burst read。
讀仿真如圖4所示,其中TRCD為20 ns(2 cycles),CL為30 ns(3 cycles),采用自動(dòng)預(yù)充電。
寫(xiě)仿真如圖5所示,其中TRCD為20 ns(2 cycles),采用自動(dòng)預(yù)充電。
幀緩存模塊(處理后)與幀緩存模塊(處理前)類(lèi)似,完成從異步FIFO中讀取圖像數(shù)據(jù),并實(shí)現(xiàn)幀緩存的功能。當(dāng)視頻顯示模塊需要圖像數(shù)據(jù)進(jìn)行顯示時(shí),可以通過(guò)FIFO獲取幀緩存中的圖像數(shù)據(jù),此處不再贅述。
4 調(diào)試配置模塊和視頻顯示模塊
調(diào)試配置模塊實(shí)現(xiàn)的功能是通過(guò)PC的UART接口對(duì)FPGA圖像處理模塊進(jìn)行參數(shù)配置,以獲得不同的處理結(jié)果,可以利用該模塊對(duì)二值化的閾值進(jìn)行設(shè)置以實(shí)現(xiàn)對(duì)應(yīng)操作。
視頻顯示模塊產(chǎn)生VGA協(xié)議所需的行場(chǎng)同步信號(hào),并通過(guò)異步FIFO請(qǐng)求圖像處理模塊的幀數(shù)據(jù),送到ADV7123完成RGB數(shù)據(jù)的D/A轉(zhuǎn)換,從而在VGA顯示器上完成實(shí)時(shí)圖像處理后的顯示。VGA(640×480@60 Hz)行周期由96個(gè)同步信號(hào),48個(gè)消隱后肩,640個(gè)行有效數(shù)據(jù),16個(gè)消隱前肩的像素構(gòu)成;場(chǎng)周期由兩個(gè)同步信號(hào),33個(gè)消隱后肩,480個(gè)場(chǎng)有效數(shù)據(jù),10個(gè)消隱前肩的行周期構(gòu)成。相關(guān)時(shí)序如圖6、圖7所示。
圖6展示了VGA的行周期,實(shí)現(xiàn)了紅、綠、藍(lán)、青、黑、白、黃,品紅8色顯示,每一色是80個(gè)像素,共640個(gè)像素。圖7展示了VGA的場(chǎng)周期,由480個(gè)有效行組成。
5 圖像處理模塊
圖像處理模塊完成圖像處理工作,通過(guò)異步FIFO從幀緩存模塊(處理前)取數(shù)據(jù),處理以后,再通過(guò)異步FIFO把處理后的數(shù)據(jù)流存到幀緩存模塊(處理后)。由于該模塊與整個(gè)系統(tǒng)的接口簡(jiǎn)單(輸入是流式讀FIFO,輸出是流式寫(xiě)FIFO),并且與其他模塊耦合性極小,因此該模塊很容易擴(kuò)展,基于流水線和并行操作的圖像處理算法基本上都可以通過(guò)此模塊實(shí)現(xiàn)。圖8是對(duì)實(shí)時(shí)圖像(上半部分)640×240區(qū)域進(jìn)行RGB到Y(jié)CbCr色彩空間轉(zhuǎn)換后,取閾值分別為50、100、150進(jìn)行二值化處理后的效果。
本文采用Altera公司的Cyclone II EP2C35系列FPGA設(shè)計(jì)并實(shí)現(xiàn)了一種視頻圖像處理實(shí)驗(yàn)平臺(tái),該平臺(tái)具有結(jié)構(gòu)簡(jiǎn)單、擴(kuò)展性好等優(yōu)勢(shì)。在該系統(tǒng)的具體實(shí)現(xiàn)當(dāng)中,所有的數(shù)據(jù)流處理和控制均采用FPGA硬件邏輯實(shí)現(xiàn),因此該系統(tǒng)具有數(shù)據(jù)處理效率高的特點(diǎn),但也因此引入了對(duì)FIFO和SDRAM的控制難點(diǎn),這是相關(guān)設(shè)計(jì)人員最需要注意的。由于視頻處理前和處理后均引入了SDRAM幀緩存,因此對(duì)于各種視頻圖像處理算法,只需在FPGA內(nèi)對(duì)圖像處理模塊作相應(yīng)修改,而前端采集模塊和終端顯示模塊無(wú)需任何改變就可實(shí)現(xiàn)實(shí)時(shí)圖像的各種不同的數(shù)據(jù)處理與相關(guān)驗(yàn)證。由于目前該系統(tǒng)中沒(méi)有涉及到復(fù)雜的圖像處理算法,所以下一步的工作是研究如何在該平臺(tái)上實(shí)現(xiàn)更多的圖像處理算法。
參考文獻(xiàn)
[1] 祝長(zhǎng)鋒,肖鐵軍.基于FPGA的視頻圖像采集系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(17):4404-4407.
[2] 李衛(wèi),王杉.SDRAM控制器的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].電子工程師,2004,30(10):29,32.
[3] 宋還吒,唐立軍.基于FPGA和OV7620的圖像采集及VGA顯示[J].電視技術(shù),2011,35(5):45-47.
[4] Samsung Electronics. 64 Mb K-die SDRAM Specification ds_k4s64xx32k_rev11[Z]. 2006.
[5] JEDEC Standard No.21-c [S]. JEDEC, Page3.11.5.1(1-19).
[6] OmniVision Technologies. OV7670 datasheet[Z].2006.
[7] OmniVision Technologies. OminiVision serial camera control bus(SCCB) functional specification[Z]. 2003.