摘要:提出了一種采用Altera公司CycloneⅡ系列的FPGA作為主控芯片,采用OV7670這款CMOS圖像傳感器作為視頻信號源并采用SRAM(靜態(tài)隨機存儲器)作為數(shù)據(jù)緩存的實用方案,實現(xiàn)了對圖像傳感器寄存器配置、圖像傳感器輸出信號采集、圖像數(shù)據(jù)格式轉(zhuǎn)換、圖像數(shù)據(jù)緩存及zui終在VGA顯示器上進行圖像顯示的一系列過程。該視頻采集系統(tǒng)設計能夠很好地滿足實時圖像的輸出需求。
關鍵詞:視頻采集;OV7670;FPGA;SRAM;VGA
CMOS與
CCD傳感器是目前被普遍采用的2種圖像傳感器。CMOS圖像傳感器可通過CMOS(互補金屬氧化物半導體)技術將像素陣列與外圍支持電路(如圖像傳感器核心、單一時鐘、所有的時序邏輯、可編程功能和A/D轉(zhuǎn)換器)集成在同一塊芯片上。與CCD(電容耦合器件)圖像傳感器相比,CMOS圖像傳感器將整個圖像系統(tǒng)集成在一塊芯片上,具有體積小、重量輕、功耗低、編程方便、易于控制等優(yōu)點,并且可通過I2C,SPI等接口配置其工作方式等功能,可控性強。所以CMOS圖像傳感器在消費類電子、汽車電子、工業(yè)控制、圖像處理等領域的應用越來越廣泛。
通常視頻數(shù)據(jù)流需要處理的數(shù)據(jù)量大,而且對于實時性的要求也很高,圖像的采集和數(shù)據(jù)處理速度直接影響后續(xù)的圖像顯示質(zhì)量。而可編程邏輯器件FPGA的快速發(fā)展使之在視頻圖像采集及圖像的無損傳輸領域具有得天獨厚的優(yōu)勢。因此,本系統(tǒng)針對OV7670這款CMOS圖像傳感器,采用Altera公司CycloneⅡ系列的FPGA作為主控芯片,來實現(xiàn)視頻數(shù)據(jù)的無損傳輸及顯示。
1、系統(tǒng)總體結(jié)構(gòu)和工作原理
本視頻采集系統(tǒng)采用OmniVision公司的OV7670數(shù)字圖像傳感器提供數(shù)字視頻信號,采用Altera公司CycloneⅡ系列的FPGA作為主控芯片,并采用單片SRAM(靜態(tài)隨機存儲器)作為數(shù)據(jù)緩存,將從FPGA輸出的數(shù)字信號經(jīng)過D/A轉(zhuǎn)換換后輸入到VGA顯示器上進行顯示。其總體結(jié)構(gòu)框圖如圖1所示。
系統(tǒng)的工作原理為:系統(tǒng)上電后,F(xiàn)PGA通過標準SCCB(SerialCameraControlBus)接口對圖像傳感器芯片的控制寄存器進行配置,設置它的工作方式(如輸出數(shù)據(jù)格式、輸出像素時鐘、曝光時間等),在本系統(tǒng)中將圖像傳感器輸出圖像格式設置為RGB565格式;對芯片初始化完畢后,F(xiàn)PGA為圖像傳感器提供25MHz的主時鐘,實時讀出圖像傳感器的行、幀同步信號以及像素時鐘和8位圖像數(shù)據(jù)信號;FPGA中數(shù)據(jù)采集與格式轉(zhuǎn)換模塊將讀入的圖像數(shù)據(jù)實時兩兩拼接轉(zhuǎn)換成16位RGB數(shù)據(jù),由于圖像數(shù)據(jù)要進行跨時鐘域傳輸,需要由緩存控制模塊中的FIFO進行緩沖,然后送到SRAM存儲,同時VGA控制模塊產(chǎn)生VGA顯示時序,在需要將視頻圖像顯示時由VGA控制模塊產(chǎn)生讀信號,通過FIFO從SRAM中讀出圖像數(shù)據(jù),圖像數(shù)據(jù)zui終經(jīng)D/A轉(zhuǎn)換送到VGA顯示器進行顯示。
2、系統(tǒng)各模塊介紹
2.1圖像傳感器OV7670
本視頻采集系統(tǒng)采用OmniVision公司的OV7670這款CMOS圖像傳感器來采集視頻,為系統(tǒng)提供數(shù)字視頻信號。
OV7670圖像傳感器體積小,工作電壓低,提供單片VGA攝像頭和影像處理器的所有功能。通過SCCB總線控制,可以輸入整幀、子采樣、取窗口等方式的各種分辨率8位影像數(shù)據(jù)。所有圖像處理功能過程包括伽瑪曲線、白平衡、飽和度、色度等都可以通過SCCB接口編程。而SCCB是和I2C相同的一個協(xié)議。在本系統(tǒng)中采用Verilog語言描述的I2C配置模塊對OV7670的控制寄存器進行配置。
OV7670共有201個可供配置的控制寄存器,下面對幾個比較重要的控制寄存器進行說明。
CLKRC(寄存器地址0x11):配置OV7670輸出像素時鐘相對于外部(本系統(tǒng)中為FPGA)提供給OV7670圖像傳感器主時鐘的分頻。OV7670輸出的像素時鐘需要輸入FPGA用作數(shù)據(jù)處理的時鐘。
COM7(寄存器地址0x12):設置圖像的輸出格式,240)RGB565格式等??梢詫D像分辨率配置成從40×30到VGA分辨率的各尺寸,并且可以將圖像數(shù)據(jù)格式配置成YUV,RGB565,BayerRGBRAW,ProcessedBayerRAW等。這個寄存器的zui高位是用來軟件復位所有寄存器的值的。
SCALING_XSC(寄存器地址0x70)和SCAUNG_YSC(寄存器地址0x71):主要在調(diào)試的時候使用,分別將SCALING_XSC和SCALING_YSC的zui高位配置為1和0,就可以讓圖像傳感器輸出8色彩帶。這2個寄存器的其他位分別用于設置圖像的水平縮放系數(shù)和垂直縮放系數(shù)。
2.2 I2C控制模塊
I2C(Inter-IntegrateCircuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設備。用來對OV7670圖像傳感器進行配置的SCCB和I2C是相同的協(xié)議。本系統(tǒng)采用I2C控制模塊實現(xiàn)對OV7670的控制寄存器的配置。
I2C控制模塊包括I2C時序控制模塊和OV7670配置模塊。I2C時序控制模塊用于產(chǎn)生符合標準I2C協(xié)議的SCL和SDA信號,I2C傳輸時序如圖2所示。時序控制模塊每次傳輸24位數(shù)據(jù),前8位是從設備地址(本系統(tǒng)中從設備即OV7670,將其地址定義為0x42,代表寫OV7670控制寄存器),接下來的8位是從設備寄存器地址,zui后8位是對OV7670控制寄存器進行配置的數(shù)據(jù)。OV7670配置模塊對從設備地址、從設備寄存器地址及配置的寄存器值總共24位數(shù)據(jù)進行了定義。本系統(tǒng)的I2C總線的時鐘采用20kHz,是由50MHz的系統(tǒng)時鐘分頻得到。
由OV7670輸入到FPGA的視頻信號有8位圖像數(shù)據(jù)cam_data[7:0]、像素時鐘cam_pclk、行有效cam_href、幀同步cam_vsync。在對OV7670的控制寄存器進行配置后,采用QuartusⅡ軟件提供的SignalTapⅡ邏輯分析儀觀察由OV7670輸入到FPGA的視頻信號,如圖3所示。
2.3數(shù)據(jù)采集與格式轉(zhuǎn)換模塊
利用I2C配置模塊配置完OV7670的控制寄存器以后,OV7670就能不斷輸出符合要求的8位圖像信號、像素時鐘和行幀同步信號。利用像素時鐘和行幀同步信號可以對采集到的8位RGB565圖像信號進行處理,系統(tǒng)中主要是將采集到的前后2個8位行數(shù)據(jù)合并成一個16位數(shù)據(jù),以方便數(shù)據(jù)在后幾個模塊中的傳輸、緩存及處理。
如圖4所示RGB565時序及數(shù)據(jù)格式,一個像素占2個字節(jié),其中第1個字節(jié)的前5位用來表示R(Red),*個字節(jié)的后3位加上第2個字節(jié)的前3位用來表示G(Green),第二個字節(jié)的后5位用來表示B(Blue)。數(shù)據(jù)采集與格式轉(zhuǎn)換模塊將FPGA采集到的數(shù)據(jù)還原成16位的像素數(shù)據(jù)。本系統(tǒng)中OV7670輸入到FPGA的圖像數(shù)據(jù)一幀有240行數(shù)據(jù),在一個行有效期間有640個8位數(shù)據(jù),經(jīng)過轉(zhuǎn)換后輸出320個16位數(shù)據(jù),輸入到緩存控制模塊。
Verilog代碼如下:
2.4緩存控制模塊
靜態(tài)隨機存儲器(Static Random Access Memory,SRAM)和同步動態(tài)隨機存儲器(Synchronous Dynamic Random Access Memory,SDRAM)是目前常用的2種存儲器,2種存儲器各有優(yōu)劣,而SRAM相對于SDRAM時序控制較為簡單,因此本系統(tǒng)采用SRAM作為數(shù)據(jù)緩存。緩存控制模塊主要實現(xiàn)將轉(zhuǎn)換后的數(shù)據(jù)緩存在SRAM寫FIFO中以及將從SRAM讀出的數(shù)據(jù)緩存在SRAM讀FIFO中,而前端數(shù)據(jù)采集和處理是用OV7670輸入的25MHz的像素時鐘作為主控時鐘的,而SRAM的讀寫時鐘為100MHz,而后端VGA控制模塊的時鐘也為25MHz,對于數(shù)據(jù)在異頻的時鐘域之間的傳輸,需要利用例化2個異步FIFO模塊fifo_in和fifo_out作為數(shù)據(jù)在不同時鐘域之間的緩沖。FIFO通過IP核實現(xiàn),存儲寬度為16b,存儲深度選擇512。緩存控制模塊的框圖如圖5所示。利用FIFO解決異頻時鐘域數(shù)據(jù)同步的方法是用上級隨路時鐘寫上級數(shù)據(jù),然后用本級時鐘讀出數(shù)據(jù)。由于時鐘頻率不同,因此兩個端口的數(shù)據(jù)吞吐率不一致,設計時要開好緩沖區(qū),并通過監(jiān)控確保數(shù)據(jù)不會溢出。
2.4.1fifo_in模塊
在本系統(tǒng)中用數(shù)據(jù)采集與格式轉(zhuǎn)換模塊處理后的16位圖像數(shù)據(jù)作為fifo_in模塊的輸入數(shù)據(jù),每次往FIFO中寫一行數(shù)據(jù)(320個16位數(shù)據(jù))OV7670輸入的像素時鐘作為寫時鐘,行有效cam_href作為FIFO寫使能,F(xiàn)IFO的讀時鐘rdclk為100MHz,也是SRAM的讀寫時鐘。FIFO讀使能產(chǎn)生是通過判斷FIFO寫使能下降沿來生成一個計數(shù)值為320的計數(shù)器,在計數(shù)期間將讀使能置高,將數(shù)據(jù)由FIFO緩存到SRAM。因為在320個數(shù)據(jù)寫完后有一段時間行有效為低,由于SRAM讀速率遠大于上一級寫速率,可以充分利用這段時間將數(shù)據(jù)存入SRAM。
2.4.2fifo_out模塊
由于采用單片SRAM,SRAM的讀寫要避免沖突。因此通過判斷fifo_out模塊中的wrusedw(FIFO中剩余的數(shù)據(jù)數(shù)量)來控制FIFO的讀/寫。當wrusedw的值小于192時,將一個標志位fifo_empty置高。為避免讀寫沖突,將SRAM讀使能的產(chǎn)生分為2種情況,在幀有效信號置高期間,此時一幀圖像的數(shù)據(jù)正在由圖像傳感器輸出,SRAM會存在寫入數(shù)據(jù)的情況,只有在fifo_empty置高和SRAM寫使能下降沿同時滿足的情況下讀使能才會置高,而在幀有效信號為低期間,SRAM不會寫入數(shù)據(jù),只需在fifo_empty置高時一個計數(shù)值為320的計數(shù)器開始計數(shù),在汁數(shù)期間將讀使能置高即可。而FIFO的讀使能來自VGA控制模塊,在需要輸出圖像數(shù)據(jù)到VGA顯示器上顯示時,VGA控制模塊讀FIFO使能置高,來讀取FIFO中的圖像數(shù)據(jù)。
2.5VGA控制模塊
VGA(Video Graphics Array)即視頻圖形陣列,是IBM在1987年隨PS/2機一起推出的一種視頻傳輸標準,具有分辨率高、顯示速率快、顏色豐富等優(yōu)點,在彩色顯示器領域得到了廣泛的應用。
VGA控制模塊主要是產(chǎn)生符合要求的VGA時序,使得視頻圖像數(shù)據(jù)能夠正確地在VGA顯示器上進行顯示。本系統(tǒng)中VGA控制模塊產(chǎn)生的是分辨率為640×480,刷新率為60Hz的VGA時序,并將從SRAM讀出的16位像素信號分成5位red信號、6位green信號和5位blue信號,輸出到D/A轉(zhuǎn)換電路。
VGA控制模塊中主要利用行同步計數(shù)器hcnt和場同步計數(shù)器vcnt來分別產(chǎn)生行同步和場同步。時序主要參考分辨率為640×480,刷新率為60Hz的VGA工業(yè)標準時序,如表1所示。
用于產(chǎn)生行、場同步的Verilog代碼如下:
在VGA控制模塊中利用行同步計數(shù)和場同步計數(shù)定義視頻圖像顯示區(qū)域。對于不同的顯示分辨率,只需參考相應的時序,修改代碼中的水平參數(shù)和垂直參數(shù)即可。由于VGA分辨率是640×480,而OV7670輸出圖像大小為320×240,將顯示器左上角區(qū)域作為視頻圖像顯示區(qū)域。在行同步計數(shù)和場同步計數(shù)均計數(shù)到視頻圖像顯示區(qū)域時,由VGA控制模塊產(chǎn)生讀FIFO信號,來讀取緩存在SRAM中的圖像數(shù)據(jù)進行顯示。
3、顯示效果及分析
本系統(tǒng)zui終實現(xiàn)將OV7670采集到的視頻圖像在VGA顯示器上進行實時顯示,圖像顯示流暢,畫面質(zhì)量較好。顯示效果如圖6所示。
圖像zui終的顯示效果受多方面的影響,主要包括圖像傳感器的質(zhì)量、D/A轉(zhuǎn)換質(zhì)量、Verilog語言描述的FPGA硬件設計、系統(tǒng)硬件電路設計幾方面。本系統(tǒng)中OV7670圖像傳感器采集速度30幀/s,有效像素30萬,靈敏度較高,適合低照度應用。針對不同的應用環(huán)境,可以通過修改OV7670控制寄存器的值來調(diào)整傳感器內(nèi)部圖像處理過程中的白平衡、飽和度、色度等來提升特定環(huán)境下的圖像質(zhì)量,但受限于圖像傳感器的有效像素,這種方式所提升的顯示質(zhì)量也是有限的。另外一個對圖像質(zhì)雖影響比較大的方面是圖像數(shù)據(jù)D/A轉(zhuǎn)換質(zhì)量。由FPGA輸出的圖像數(shù)據(jù)是數(shù)字信號,而VGA顯示器上的VGA接口接收的是模擬信號,必須經(jīng)過數(shù)字到模擬的信號轉(zhuǎn)換。
本系統(tǒng)采用權(quán)電阻網(wǎng)絡來實現(xiàn)RGB565信號到VGA接口三基色信號轉(zhuǎn)換的電路,可基本滿足要求。在對圖像要求較高的場合,可采用的三通道視頻D/A轉(zhuǎn)換芯片來實現(xiàn)數(shù)模轉(zhuǎn)換,如ADI公司的ADV7125芯片等。另外,數(shù)字接口的發(fā)展為傳輸非壓縮的實時數(shù)字視頻提供了很好的支持。數(shù)字視頻接口DVI(Digital VideoInterface)和高清晰度多媒體接口HDMI(High Definition Multimedia Interface)都可以替代模擬的VGA接口應用到本系統(tǒng)中,從而能以低成本的電纜實現(xiàn)長距離、高質(zhì)量的數(shù)字視頻信號傳輸。
4、結(jié)語
本視頻采集系統(tǒng)以FPGA為主控芯片,采用SRAM作為緩存,實現(xiàn)了對OV7670這款數(shù)字圖像傳感器的輸出視頻信號的數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)緩存及視頻的zui終顯示。隨著CMOS技術和工藝的飛速發(fā)展,CMOS圖像傳感器的數(shù)據(jù)吞吐量越來越大,分辨率越來越高,對于更高要求的應用環(huán)境,可以采用更高速更高分辨率的CMOS圖像傳感器作為視頻信號源,可編程邏輯器件FPGA、各種存儲器如SRAM等也朝著高速化發(fā)展,使高分辨率、高速的視頻采集系統(tǒng)的實現(xiàn)和應用成為可能。