摘要:提出了一種采用altera公司cycloneⅱ系列的fpga作為主控芯片,采用ov7670這款cmos圖像傳感器作為視頻信號(hào)源并采用sram(靜態(tài)隨機(jī)存儲(chǔ)器)作為數(shù)據(jù)緩存的實(shí)用方案,實(shí)現(xiàn)了對(duì)圖像傳感器寄存器配置、圖像傳感器輸出信號(hào)采集、圖像數(shù)據(jù)格式轉(zhuǎn)換、圖像數(shù)據(jù)緩存及zui終在vga顯示器上進(jìn)行圖像顯示的一系列過(guò)程。該視頻采集系統(tǒng)設(shè)計(jì)能夠很好地滿足實(shí)時(shí)圖像的輸出需求。
關(guān)鍵詞:視頻采集;ov7670;fpga;sram;vga
cmos與ccd傳感器是目前被普遍采用的2種圖像傳感器。cmos圖像傳感器可通過(guò)cmos(互補(bǔ)金屬氧化物半導(dǎo)體)技術(shù)將像素陣列與外圍支持電路(如圖像傳感器核心、單一時(shí)鐘、所有的時(shí)序邏輯、可編程功能和a/d轉(zhuǎn)換器)集成在同一塊芯片上。與ccd(電容耦合器件)圖像傳感器相比,cmos圖像傳感器將整個(gè)圖像系統(tǒng)集成在一塊芯片上,具有體積小、重量輕、功耗低、編程方便、易于控制等優(yōu)點(diǎn),并且可通過(guò)i2c,spi等接口配置其工作方式等功能,可控性強(qiáng)。所以cmos圖像傳感器在消費(fèi)類電子、汽車電子、工業(yè)控制、圖像處理等領(lǐng)域的應(yīng)用越來(lái)越廣泛。
通常視頻數(shù)據(jù)流需要處理的數(shù)據(jù)量大,而且對(duì)于實(shí)時(shí)性的要求也很高,圖像的采集和數(shù)據(jù)處理速度直接影響后續(xù)的圖像顯示質(zhì)量。而可編程邏輯器件fpga的快速發(fā)展使之在視頻圖像采集及圖像的無(wú)損傳輸領(lǐng)域具有得天獨(dú)厚的優(yōu)勢(shì)。因此,本系統(tǒng)針對(duì)ov7670這款cmos圖像傳感器,采用altera公司cycloneⅱ系列的fpga作為主控芯片,來(lái)實(shí)現(xiàn)視頻數(shù)據(jù)的無(wú)損傳輸及顯示。
1、系統(tǒng)總體結(jié)構(gòu)和工作原理
本視頻采集系統(tǒng)采用omnivision公司的ov7670數(shù)字圖像傳感器提供數(shù)字視頻信號(hào),采用altera公司cycloneⅱ系列的fpga作為主控芯片,并采用單片sram(靜態(tài)隨機(jī)存儲(chǔ)器)作為數(shù)據(jù)緩存,將從fpga輸出的數(shù)字信號(hào)經(jīng)過(guò)d/a轉(zhuǎn)換換后輸入到vga顯示器上進(jìn)行顯示。其總體結(jié)構(gòu)框圖如圖1所示。
系統(tǒng)的工作原理為:系統(tǒng)上電后,fpga通過(guò)標(biāo)準(zhǔn)sccb(serialcameracontrolbus)接口對(duì)圖像傳感器芯片的控制寄存器進(jìn)行配置,設(shè)置它的工作方式(如輸出數(shù)據(jù)格式、輸出像素時(shí)鐘、曝光時(shí)間等),在本系統(tǒng)中將圖像傳感器輸出圖像格式設(shè)置為rgb565格式;對(duì)芯片初始化完畢后,fpga為圖像傳感器提供25mhz的主時(shí)鐘,實(shí)時(shí)讀出圖像傳感器的行、幀同步信號(hào)以及像素時(shí)鐘和8位圖像數(shù)據(jù)信號(hào);fpga中數(shù)據(jù)采集與格式轉(zhuǎn)換模塊將讀入的圖像數(shù)據(jù)實(shí)時(shí)兩兩拼接轉(zhuǎn)換成16位rgb數(shù)據(jù),由于圖像數(shù)據(jù)要進(jìn)行跨時(shí)鐘域傳輸,需要由緩存控制模塊中的fifo進(jìn)行緩沖,然后送到sram存儲(chǔ),同時(shí)vga控制模塊產(chǎn)生vga顯示時(shí)序,在需要將視頻圖像顯示時(shí)由vga控制模塊產(chǎn)生讀信號(hào),通過(guò)fifo從sram中讀出圖像數(shù)據(jù),圖像數(shù)據(jù)zui終經(jīng)d/a轉(zhuǎn)換送到vga顯示器進(jìn)行顯示。
2、系統(tǒng)各模塊介紹
2.1圖像傳感器ov7670
本視頻采集系統(tǒng)采用omnivision公司的ov7670這款cmos圖像傳感器來(lái)采集視頻,為系統(tǒng)提供數(shù)字視頻信號(hào)。
ov7670圖像傳感器體積小,工作電壓低,提供單片vga攝像頭和影像處理器的所有功能。通過(guò)sccb總線控制,可以輸入整幀、子采樣、取窗口等方式的各種分辨率8位影像數(shù)據(jù)。所有圖像處理功能過(guò)程包括伽瑪曲線、白平衡、飽和度、色度等都可以通過(guò)sccb接口編程。而sccb是和i2c相同的一個(gè)協(xié)議。在本系統(tǒng)中采用verilog語(yǔ)言描述的i2c配置模塊對(duì)ov7670的控制寄存器進(jìn)行配置。
ov7670共有201個(gè)可供配置的控制寄存器,下面對(duì)幾個(gè)比較重要的控制寄存器進(jìn)行說(shuō)明。
clkrc(寄存器地址0x11):配置ov7670輸出像素時(shí)鐘相對(duì)于外部(本系統(tǒng)中為fpga)提供給ov7670圖像傳感器主時(shí)鐘的分頻。ov7670輸出的像素時(shí)鐘需要輸入fpga用作數(shù)據(jù)處理的時(shí)鐘。
com7(寄存器地址0x12):設(shè)置圖像的輸出格式,240)rgb565格式等??梢詫D像分辨率配置成從40×30到vga分辨率的各尺寸,并且可以將圖像數(shù)據(jù)格式配置成yuv,rgb565,bayerrgbraw,processedbayerraw等。這個(gè)寄存器的zui高位是用來(lái)軟件復(fù)位所有寄存器的值的。
scaling_xsc(寄存器地址0x70)和scaung_ysc(寄存器地址0x71):主要在調(diào)試的時(shí)候使用,分別將scaling_xsc和scaling_ysc的zui高位配置為1和0,就可以讓圖像傳感器輸出8色彩帶。這2個(gè)寄存器的其他位分別用于設(shè)置圖像的水平縮放系數(shù)和垂直縮放系數(shù)。
2.2 i2c控制模塊
i2c(inter-integratecircuit)總線是由philips公司開(kāi)發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。用來(lái)對(duì)ov7670圖像傳感器進(jìn)行配置的sccb和i2c是相同的協(xié)議。本系統(tǒng)采用i2c控制模塊實(shí)現(xiàn)對(duì)ov7670的控制寄存器的配置。
i2c控制模塊包括i2c時(shí)序控制模塊和ov7670配置模塊。i2c時(shí)序控制模塊用于產(chǎn)生符合標(biāo)準(zhǔn)i2c協(xié)議的scl和sda信號(hào),i2c傳輸時(shí)序如圖2所示。時(shí)序控制模塊每次傳輸24位數(shù)據(jù),前8位是從設(shè)備地址(本系統(tǒng)中從設(shè)備即ov7670,將其地址定義為0x42,代表寫(xiě)ov7670控制寄存器),接下來(lái)的8位是從設(shè)備寄存器地址,zui后8位是對(duì)ov7670控制寄存器進(jìn)行配置的數(shù)據(jù)。ov7670配置模塊對(duì)從設(shè)備地址、從設(shè)備寄存器地址及配置的寄存器值總共24位數(shù)據(jù)進(jìn)行了定義。本系統(tǒng)的i2c總線的時(shí)鐘采用20khz,是由50mhz的系統(tǒng)時(shí)鐘分頻得到。
由ov7670輸入到fpga的視頻信號(hào)有8位圖像數(shù)據(jù)cam_data[7:0]、像素時(shí)鐘cam_pclk、行有效cam_href、幀同步cam_vsync。在對(duì)ov7670的控制寄存器進(jìn)行配置后,采用quartusⅱ軟件提供的signaltapⅱ邏輯分析儀觀察由ov7670輸入到fpga的視頻信號(hào),如圖3所示。
2.3數(shù)據(jù)采集與格式轉(zhuǎn)換模塊
利用i2c配置模塊配置完ov7670的控制寄存器以后,ov7670就能不斷輸出符合要求的8位圖像信號(hào)、像素時(shí)鐘和行幀同步信號(hào)。利用像素時(shí)鐘和行幀同步信號(hào)可以對(duì)采集到的8位rgb565圖像信號(hào)進(jìn)行處理,系統(tǒng)中主要是將采集到的前后2個(gè)8位行數(shù)據(jù)合并成一個(gè)16位數(shù)據(jù),以方便數(shù)據(jù)在后幾個(gè)模塊中的傳輸、緩存及處理。
如圖4所示rgb565時(shí)序及數(shù)據(jù)格式,一個(gè)像素占2個(gè)字節(jié),其中第1個(gè)字節(jié)的前5位用來(lái)表示r(red),*個(gè)字節(jié)的后3位加上第2個(gè)字節(jié)的前3位用來(lái)表示g(green),第二個(gè)字節(jié)的后5位用來(lái)表示b(blue)。數(shù)據(jù)采集與格式轉(zhuǎn)換模塊將fpga采集到的數(shù)據(jù)還原成16位的像素?cái)?shù)據(jù)。本系統(tǒng)中ov7670輸入到fpga的圖像數(shù)據(jù)一幀有240行數(shù)據(jù),在一個(gè)行有效期間有640個(gè)8位數(shù)據(jù),經(jīng)過(guò)轉(zhuǎn)換后輸出320個(gè)16位數(shù)據(jù),輸入到緩存控制模塊。
verilog代碼如下:
2.4緩存控制模塊
靜態(tài)隨機(jī)存儲(chǔ)器(static random access memory,sram)和同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(synchronous dynamic random access memory,sdram)是目前常用的2種存儲(chǔ)器,2種存儲(chǔ)器各有優(yōu)劣,而sram相對(duì)于sdram時(shí)序控制較為簡(jiǎn)單,因此本系統(tǒng)采用sram作為數(shù)據(jù)緩存。緩存控制模塊主要實(shí)現(xiàn)將轉(zhuǎn)換后的數(shù)據(jù)緩存在sram寫(xiě)fifo中以及將從sram讀出的數(shù)據(jù)緩存在sram讀fifo中,而前端數(shù)據(jù)采集和處理是用ov7670輸入的25mhz的像素時(shí)鐘作為主控時(shí)鐘的,而sram的讀寫(xiě)時(shí)鐘為100mhz,而后端vga控制模塊的時(shí)鐘也為25mhz,對(duì)于數(shù)據(jù)在異頻的時(shí)鐘域之間的傳輸,需要利用例化2個(gè)異步fifo模塊fifo_in和fifo_out作為數(shù)據(jù)在不同時(shí)鐘域之間的緩沖。fifo通過(guò)ip核實(shí)現(xiàn),存儲(chǔ)寬度為16b,存儲(chǔ)深度選擇512。緩存控制模塊的框圖如圖5所示。利用fifo解決異頻時(shí)鐘域數(shù)據(jù)同步的方法是用上級(jí)隨路時(shí)鐘寫(xiě)上級(jí)數(shù)據(jù),然后用本級(jí)時(shí)鐘讀出數(shù)據(jù)。由于時(shí)鐘頻率不同,因此兩個(gè)端口的數(shù)據(jù)吞吐率不一致,設(shè)計(jì)時(shí)要開(kāi)好緩沖區(qū),并通過(guò)監(jiān)控確保數(shù)據(jù)不會(huì)溢出。
2.4.1fifo_in模塊
在本系統(tǒng)中用數(shù)據(jù)采集與格式轉(zhuǎn)換模塊處理后的16位圖像數(shù)據(jù)作為fifo_in模塊的輸入數(shù)據(jù),每次往fifo中寫(xiě)一行數(shù)據(jù)(320個(gè)16位數(shù)據(jù))ov7670輸入的像素時(shí)鐘作為寫(xiě)時(shí)鐘,行有效cam_href作為fifo寫(xiě)使能,fifo的讀時(shí)鐘rdclk為100mhz,也是sram的讀寫(xiě)時(shí)鐘。fifo讀使能產(chǎn)生是通過(guò)判斷fifo寫(xiě)使能下降沿來(lái)生成一個(gè)計(jì)數(shù)值為320的計(jì)數(shù)器,在計(jì)數(shù)期間將讀使能置高,將數(shù)據(jù)由fifo緩存到sram。因?yàn)樵?20個(gè)數(shù)據(jù)寫(xiě)完后有一段時(shí)間行有效為低,由于sram讀速率遠(yuǎn)大于上一級(jí)寫(xiě)速率,可以充分利用這段時(shí)間將數(shù)據(jù)存入sram。
2.4.2fifo_out模塊
由于采用單片sram,sram的讀寫(xiě)要避免沖突。因此通過(guò)判斷fifo_out模塊中的wrusedw(fifo中剩余的數(shù)據(jù)數(shù)量)來(lái)控制fifo的讀/寫(xiě)。當(dāng)wrusedw的值小于192時(shí),將一個(gè)標(biāo)志位fifo_empty置高。為避免讀寫(xiě)沖突,將sram讀使能的產(chǎn)生分為2種情況,在幀有效信號(hào)置高期間,此時(shí)一幀圖像的數(shù)據(jù)正在由圖像傳感器輸出,sram會(huì)存在寫(xiě)入數(shù)據(jù)的情況,只有在fifo_empty置高和sram寫(xiě)使能下降沿同時(shí)滿足的情況下讀使能才會(huì)置高,而在幀有效信號(hào)為低期間,sram不會(huì)寫(xiě)入數(shù)據(jù),只需在fifo_empty置高時(shí)一個(gè)計(jì)數(shù)值為320的計(jì)數(shù)器開(kāi)始計(jì)數(shù),在汁數(shù)期間將讀使能置高即可。而fifo的讀使能來(lái)自vga控制模塊,在需要輸出圖像數(shù)據(jù)到vga顯示器上顯示時(shí),vga控制模塊讀fifo使能置高,來(lái)讀取fifo中的圖像數(shù)據(jù)。
2.5vga控制模塊
vga(video graphics array)即視頻圖形陣列,是ibm在1987年隨ps/2機(jī)一起推出的一種視頻傳輸標(biāo)準(zhǔn),具有分辨率高、顯示速率快、顏色豐富等優(yōu)點(diǎn),在彩色顯示器領(lǐng)域得到了廣泛的應(yīng)用。
vga控制模塊主要是產(chǎn)生符合要求的vga時(shí)序,使得視頻圖像數(shù)據(jù)能夠正確地在vga顯示器上進(jìn)行顯示。本系統(tǒng)中vga控制模塊產(chǎn)生的是分辨率為640×480,刷新率為60hz的vga時(shí)序,并將從sram讀出的16位像素信號(hào)分成5位red信號(hào)、6位green信號(hào)和5位blue信號(hào),輸出到d/a轉(zhuǎn)換電路。
vga控制模塊中主要利用行同步計(jì)數(shù)器hcnt和場(chǎng)同步計(jì)數(shù)器vcnt來(lái)分別產(chǎn)生行同步和場(chǎng)同步。時(shí)序主要參考分辨率為640×480,刷新率為60hz的vga工業(yè)標(biāo)準(zhǔn)時(shí)序,如表1所示。
用于產(chǎn)生行、場(chǎng)同步的verilog代碼如下:
在vga控制模塊中利用行同步計(jì)數(shù)和場(chǎng)同步計(jì)數(shù)定義視頻圖像顯示區(qū)域。對(duì)于不同的顯示分辨率,只需參考相應(yīng)的時(shí)序,修改代碼中的水平參數(shù)和垂直參數(shù)即可。由于vga分辨率是640×480,而ov7670輸出圖像大小為320×240,將顯示器左上角區(qū)域作為視頻圖像顯示區(qū)域。在行同步計(jì)數(shù)和場(chǎng)同步計(jì)數(shù)均計(jì)數(shù)到視頻圖像顯示區(qū)域時(shí),由vga控制模塊產(chǎn)生讀fifo信號(hào),來(lái)讀取緩存在sram中的圖像數(shù)據(jù)進(jìn)行顯示。
3、顯示效果及分析
本系統(tǒng)zui終實(shí)現(xiàn)將ov7670采集到的視頻圖像在vga顯示器上進(jìn)行實(shí)時(shí)顯示,圖像顯示流暢,畫(huà)面質(zhì)量較好。顯示效果如圖6所示。
圖像zui終的顯示效果受多方面的影響,主要包括圖像傳感器的質(zhì)量、d/a轉(zhuǎn)換質(zhì)量、verilog語(yǔ)言描述的fpga硬件設(shè)計(jì)、系統(tǒng)硬件電路設(shè)計(jì)幾方面。本系統(tǒng)中ov7670圖像傳感器采集速度30幀/s,有效像素30萬(wàn),靈敏度較高,適合低照度應(yīng)用。針對(duì)不同的應(yīng)用環(huán)境,可以通過(guò)修改ov7670控制寄存器的值來(lái)調(diào)整傳感器內(nèi)部圖像處理過(guò)程中的白平衡、飽和度、色度等來(lái)提升特定環(huán)境下的圖像質(zhì)量,但受限于圖像傳感器的有效像素,這種方式所提升的顯示質(zhì)量也是有限的。另外一個(gè)對(duì)圖像質(zhì)雖影響比較大的方面是圖像數(shù)據(jù)d/a轉(zhuǎn)換質(zhì)量。由fpga輸出的圖像數(shù)據(jù)是數(shù)字信號(hào),而vga顯示器上的vga接口接收的是模擬信號(hào),必須經(jīng)過(guò)數(shù)字到模擬的信號(hào)轉(zhuǎn)換。
本系統(tǒng)采用權(quán)電阻網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)rgb565信號(hào)到vga接口三基色信號(hào)轉(zhuǎn)換的電路,可基本滿足要求。在對(duì)圖像要求較高的場(chǎng)合,可采用的三通道視頻d/a轉(zhuǎn)換芯片來(lái)實(shí)現(xiàn)數(shù)模轉(zhuǎn)換,如adi公司的adv7125芯片等。另外,數(shù)字接口的發(fā)展為傳輸非壓縮的實(shí)時(shí)數(shù)字視頻提供了很好的支持。數(shù)字視頻接口dvi(digital videointerface)和高清晰度多媒體接口hdmi(high definition multimedia interface)都可以替代模擬的vga接口應(yīng)用到本系統(tǒng)中,從而能以低成本的電纜實(shí)現(xiàn)長(zhǎng)距離、高質(zhì)量的數(shù)字視頻信號(hào)傳輸。
4、結(jié)語(yǔ)
本視頻采集系統(tǒng)以fpga為主控芯片,采用sram作為緩存,實(shí)現(xiàn)了對(duì)ov7670這款數(shù)字圖像傳感器的輸出視頻信號(hào)的數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)緩存及視頻的zui終顯示。隨著cmos技術(shù)和工藝的飛速發(fā)展,cmos圖像傳感器的數(shù)據(jù)吞吐量越來(lái)越大,分辨率越來(lái)越高,對(duì)于更高要求的應(yīng)用環(huán)境,可以采用更高速更高分辨率的cmos圖像傳感器作為視頻信號(hào)源,可編程邏輯器件fpga、各種存儲(chǔ)器如sram等也朝著高速化發(fā)展,使高分辨率、高速的視頻采集系統(tǒng)的實(shí)現(xiàn)和應(yīng)用成為可能。