基于FPGA的視頻采集顯示系統(tǒng)
摘要 設(shè)計(jì)實(shí)現(xiàn)一種基于FPGA的視頻采集顯示系統(tǒng),包括視頻圖像的采集、處理與顯示3個(gè)部分。視頻圖像部分采用CCD攝像頭OV7670作為視頻數(shù)據(jù)的采集,利用在FPGA中構(gòu)建FIFO并配合SDRAM高速讀寫實(shí)現(xiàn)視頻圖像數(shù)據(jù)的高速緩存處理,使用FPGA中構(gòu)建的Nios Il嵌入式內(nèi)核,實(shí)現(xiàn)對(duì)SDRAM的控制以及視頻數(shù)據(jù)的TFT液晶實(shí)時(shí)顯示。整個(gè)系統(tǒng)獲得了較好圖像采集、顯示效果。
關(guān)鍵詞 FPGA;視頻處理;TFT LCD;Nios II
隨著高品質(zhì)實(shí)時(shí)視頻顯示技術(shù)低,民用領(lǐng)域如天氣預(yù)報(bào)、資源探測(cè)、機(jī)器人視覺(jué)以及各種醫(yī)學(xué)圖像的實(shí)時(shí)分析;軍用領(lǐng)域如導(dǎo)彈精確制導(dǎo)、戰(zhàn)場(chǎng)動(dòng)態(tài)分析等,均需要高質(zhì)量實(shí)時(shí)視頻顯示系統(tǒng)的支持。近年來(lái)低成本的FPGA(Filed Programmable Gate Array)不斷推陳出新,利用EDA工具對(duì)FPGA芯片進(jìn)行多樣性設(shè)計(jì),已經(jīng)成為電子設(shè)計(jì)的通用平臺(tái),并逐步向支持系統(tǒng)級(jí)設(shè)計(jì)的方向發(fā)展。與專用集成電路相比,F(xiàn)PGA芯片
具有快速的定制性和高靈活性,擴(kuò)展性強(qiáng)的特點(diǎn)。作為一個(gè)平臺(tái),F(xiàn)PGA已適用于高性能低成本的視頻和圖像處理,尤其在圖像分辨率和幀率要求較高的場(chǎng)合。
設(shè)計(jì)采用CMOS圖像傳感器OV7670對(duì)外界圖像進(jìn)行實(shí)時(shí)采集,通過(guò)FPGA內(nèi)部設(shè)計(jì)的初始化模塊對(duì)圖像傳感器輸出信號(hào)的格式進(jìn)行配置。根據(jù)其輸出信號(hào)的時(shí)序,在FPGA內(nèi)部設(shè)計(jì)采集單元。采集到的數(shù)據(jù)經(jīng)過(guò)格式轉(zhuǎn)換送到內(nèi)部配置的Nios II嵌入式內(nèi)核,Nios II嵌入式內(nèi)核將實(shí)現(xiàn)LCD顯示屏控制與視頻數(shù)據(jù)的實(shí)時(shí)顯示。
1 系統(tǒng)總體設(shè)計(jì)
基于FPGA實(shí)現(xiàn)的視頻顯示系統(tǒng)的整體結(jié)構(gòu)框圖如圖1所示。系統(tǒng)主要分為:視頻采集模塊、PLL鎖相環(huán)時(shí)鐘管理模塊、I2C總線模塊、FI FO視頻數(shù)據(jù)處理模塊、Nios II顯示控制模塊。系統(tǒng)中PLL負(fù)責(zé)為NiosII嵌入式內(nèi)核、外部SDRAM和OV7670攝像頭提供時(shí)鐘,系統(tǒng)通電后,F(xiàn)PGA首先從EPCS中讀取配置數(shù)據(jù),完成自身程序加載,隨后對(duì)系統(tǒng)時(shí)鐘分頻為攝像頭提供系統(tǒng)時(shí)鐘,然后通過(guò)I2C總線完成對(duì)OV7670攝像頭的配置。
配置完成后,OV7670將采集到的視頻數(shù)據(jù)輸出格式轉(zhuǎn)換成RGB565標(biāo)準(zhǔn)的視頻數(shù)據(jù)及圖像時(shí)鐘送入FPGA進(jìn)行處理,并將處理后的圖像數(shù)據(jù)通過(guò)FIFO模塊暫時(shí)存儲(chǔ)在SDRAM中進(jìn)行緩沖,同時(shí)Nios II模塊讀取存放在SDRAM中的視頻圖像數(shù)據(jù),按照TFT液晶顯示的時(shí)序、數(shù)據(jù)要求將視頻圖像數(shù)據(jù)送到TFT彩色液晶顯示屏上顯示。
1.1 FPGA選型
FPGA是該系統(tǒng)的核心,由于系統(tǒng)目前只是完成簡(jiǎn)單的圖像處理,故FPGA選用Altera公司的低成本FPGA Cyclone II系列器件。Cyclone II系列器件簡(jiǎn)介如表1所示。
Cyclone II器件采用90 nm工藝制造,它延續(xù)Cyclone的低成本定位,在邏輯容量、PLL、乘法器和I/O數(shù)量上都比Cyclone有了較大提高,應(yīng)用Cyclone II進(jìn)行圖像處理開發(fā)有如下優(yōu)點(diǎn):(1)低成本高性能,適應(yīng)圖像處理要求較高的需要。(2)豐富的內(nèi)嵌存儲(chǔ)器資源,適應(yīng)大量圖像數(shù)據(jù)存取的需要。(3)豐富的硬件乘法器,適應(yīng)圖像處理算法的需要。系統(tǒng)的FPGA選用開發(fā)板自帶的EP2C5Q208C8芯片。
1.2 視頻采集模塊選擇
視頻圖像采集采用OmniVision公司的OV7670圖像傳感器,OV7670圖像傳感器體積小、工作電壓低。OV7670攝像頭的VGA圖像最高達(dá)到30幀/秒。通過(guò)SCCB總線控制內(nèi)部寄存器,可以使OV7670輸出整幀、子采樣、取窗口等方式的各種分辨率的圖像數(shù)據(jù)。用戶還可以完全控制圖像質(zhì)量、數(shù)據(jù)格式和傳輸方式。OV7670與FPGA硬件連接如圖3所示。
OV7670不具有內(nèi)部時(shí)鐘,視頻圖像采集前需要為OV7670提供系統(tǒng)時(shí)鐘,頻率為25 MHz,是對(duì)FPGA系統(tǒng)時(shí)鐘二分頻得到。
1.3 視頻采集與視頻圖像處理
SCCB是OmniVision公司定制的串行攝像頭控制總線(Serial Camera Control Bus),它用于對(duì)攝像頭的寄存器進(jìn)行讀寫,以達(dá)到對(duì)攝像頭輸出圖像的控制。兩線制SCCB與I2C總線兼容,是一種雙向二線制同步串行總線。它的最大頻率為400 kHz。根據(jù)協(xié)議把數(shù)據(jù)寫入寄存器和讀取寄存器的數(shù)值。SCCB的時(shí)序圖,如圖4所示。
在初始化程序中,已經(jīng)把OV7670配置為輸出QVGA格式,16位圖像數(shù)據(jù)格式為RGB565。其中VSYNC為幀同步信號(hào),HREF為行同步信號(hào),只有按照上圖中嚴(yán)格的時(shí)序,即OV7670輸出的時(shí)序,才能采集到正確的圖像數(shù)據(jù)。采集到的RGB565格式數(shù)據(jù)符合如圖5所示的標(biāo)準(zhǔn)。
在每一個(gè)行同步信號(hào)上升沿輸出視頻圖像數(shù)據(jù),在輸出RGB565格式情況下,一幀數(shù)據(jù)可分為兩次發(fā)送,第一次前一幀發(fā)送RGB的R數(shù)據(jù)的5位與G數(shù)據(jù)的高3位,后一幀發(fā)送G數(shù)據(jù)的第3位與B數(shù)據(jù)的5位,在數(shù)據(jù)處理時(shí)要對(duì)這兩幀數(shù)據(jù)進(jìn)行拼接,然后送入數(shù)據(jù)處理部分。
為防止視頻圖像數(shù)據(jù)在采集與顯示存在不同步的情況,在兩極之間構(gòu)建了FIFO并配合SDRAM以實(shí)現(xiàn)對(duì)采集數(shù)據(jù)的暫存,F(xiàn)IFO的寫使能與攝像頭的行同步信號(hào)相連,當(dāng)行同步信號(hào)有效時(shí)開始寫FIFO,當(dāng)FIFO空標(biāo)志位為低時(shí)電平表示FIFO中已存入數(shù)據(jù),則NiosII開始控制SDRAM從FIFO中讀取視頻數(shù)據(jù),這樣操作的特點(diǎn)就是將經(jīng)過(guò)緩存的數(shù)據(jù)流無(wú)停頓地傳送到輸出端,因此適合對(duì)時(shí)序不連續(xù)的像素進(jìn)行無(wú)縫緩沖處理。
1.4 視頻圖像顯示模塊
視頻圖像顯示通過(guò)在FPGA中構(gòu)建的Nios II嵌入式內(nèi)核實(shí)現(xiàn),Nios II系統(tǒng)可以在設(shè)計(jì)階段根據(jù)實(shí)際的需求來(lái)增減外設(shè)的數(shù)量和種類??梢允褂肁ltera提供的開發(fā)工具SOPC Builder,在FPGA器件上創(chuàng)建軟硬件開發(fā)的基礎(chǔ)平臺(tái),即用SOPC Builder創(chuàng)建嵌入式內(nèi)核CPU和參數(shù)化的接口總線Avalon。在此基礎(chǔ)上,可以快速地將硬件系統(tǒng)與常規(guī)軟件集成在單一可編程芯片中。而且,SOPC Builder還提供標(biāo)準(zhǔn)的接口方式,以便用戶將外圍電路做成Nios II嵌入式內(nèi)核可以添加的外設(shè)模塊。這種設(shè)計(jì)方式,方便了各類系統(tǒng)的調(diào)試。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 軟件模塊介紹
系統(tǒng)軟件總設(shè)計(jì)模塊如圖6所示,在sys_ctrl中建立PLL鎖相環(huán)對(duì)時(shí)鐘倍頻、分頻產(chǎn)生系統(tǒng)各模塊所需時(shí)鐘與系統(tǒng)復(fù)位信號(hào),vedio_in put模塊負(fù)責(zé)OV7670攝像頭的初始化與視頻圖像數(shù)據(jù)的采集,wrfifo模塊配合Nios II負(fù)責(zé)對(duì)vedio_input采集的視頻圖像數(shù)據(jù)的緩存,以防止數(shù)據(jù)時(shí)鐘不匹配而出現(xiàn)數(shù)據(jù)紊亂,而vga_ctrl模塊主要負(fù)責(zé)產(chǎn)生讀取wrfifo中的數(shù)據(jù)與實(shí)現(xiàn)數(shù)據(jù)的VGA顯示產(chǎn)生相應(yīng)的RGB數(shù)據(jù)與行、場(chǎng)同步信號(hào),再將采集數(shù)據(jù)送到Nios II中,在Nios II中用C語(yǔ)言驅(qū)動(dòng)TFT液晶,實(shí)現(xiàn)視頻數(shù)據(jù)的顯示。
2.2 Nios II嵌入式內(nèi)核程序設(shè)計(jì)
Nios II嵌入式內(nèi)核主要任務(wù)是將rag_ctrl采集數(shù)據(jù)送入SDRAM暫存,然后再根據(jù)顯示需要將暫存的數(shù)據(jù)讀取出來(lái)送到LCD顯示,為了確保顯示圖像與采集圖像的一致,在送LCD顯示數(shù)據(jù)時(shí)要注意以下幾點(diǎn);
(1)根據(jù)實(shí)際情況去除行、場(chǎng)消隱數(shù)據(jù),再根據(jù)顯示內(nèi)容的多少對(duì)數(shù)據(jù)進(jìn)行裁剪,裁剪到適合LCD顯示的大小,從而避免顯示時(shí)圖像的錯(cuò)位以及亂碼等情況。
(2)由于嵌入式內(nèi)核時(shí)鐘頻率相對(duì)于攝像頭的大量數(shù)據(jù)來(lái)說(shuō)速度還是難以做到攝像頭采集的每幅圖像都能完全顯示,所以在設(shè)計(jì)中采用隔場(chǎng)采集處理的方式,這樣避免SDRAM中數(shù)據(jù)過(guò)多以至于被填滿的情況,也解決了嵌入式內(nèi)核采集的出現(xiàn)的卡屏的情況。
3 結(jié)束語(yǔ)
采用FPGA設(shè)計(jì)并實(shí)現(xiàn)了一種視頻顯示系統(tǒng),大幅減少了電路板的尺寸,節(jié)約了成本,同時(shí)增加了設(shè)計(jì)的靈活性和系統(tǒng)的可靠性,充分應(yīng)用FPGA快速并行處理數(shù)據(jù)的特性,在產(chǎn)生同步信號(hào)的同時(shí)送出像素?cái)?shù)據(jù)。嵌入式內(nèi)核Nios II的使用,解決了其他系統(tǒng)實(shí)時(shí)圖像顯示的體積與速度問(wèn)題,擴(kuò)展了應(yīng)用范圍。