基于NiosⅡ的圖像采集和顯示的實現(xiàn)
1 系統(tǒng)設(shè)計
基于NiosⅡ的高速圖像數(shù)據(jù)采集和顯示系統(tǒng)的實現(xiàn)通常有兩種方案。一種是在NiosⅡ處理器上使用軟件控制PIO(Peripheral I/O)端口模擬采集模塊的時序,從而可靈活地存儲圖像數(shù)據(jù),并可按照圖像宏塊(如8×8像素的MCU塊)存入SDRAM的連續(xù)地址中;第二種方案是加FIFO緩沖區(qū),圖像數(shù)據(jù)直接經(jīng)DMA控制器存儲SDRAM,這種方案能節(jié)省NiosⅡ的軟件開銷,更高效地完成圖像的采集工作。
本系統(tǒng)采用的FPGA為Altera的EP1C6Q240C8,它有5980個LC(邏輯門單元)和20個M4K的RAM塊。本系統(tǒng)設(shè)計的一個11位深度的DMA控制器,需要280個Logic Cells和151個LC Registers,占FPGA整個系統(tǒng)資源的7.2%,其資源占用較少。本系統(tǒng)設(shè)計了兩個DMA控制器,一個用于前端采集模塊通道,一個用于后端顯示模塊通道。
由于CMOS和CCD的固體圖像傳感器的類型很多,有些傳感器(如OV7620)輸出的是YCrCb(4:2:2)的格式,但大多數(shù)CMOS和CCD的圖像傳感器出來的圖像數(shù)據(jù)是Raw Data(Bayer)的數(shù)據(jù)格式。所以首先需要對這些圖像數(shù)據(jù)進(jìn)行CFA插補。為了節(jié)省軟件開銷,本系統(tǒng)采用了一種最簡單的CFA插補算法(Bilinear),與高階B-spline和cubic-spline等插補函數(shù)相比,圖像的像質(zhì)相差不大。但Bilinear的算法要簡單得多,消耗的軟件資源相對要少。插補后的圖像需要進(jìn)一步裁剪成液晶屏能顯示的分辨率(QVGA),RGB分量只取高6位。
2 硬件設(shè)計
2.1 系統(tǒng)的硬件電路圖
系統(tǒng)電路圖如圖1所示。
從圖1可以看出,系統(tǒng)的采集、存儲和顯示模塊的控制器都是在EP1C6Q240C8這塊FPGA上完成。
2.2 FPGA中的電路設(shè)計
在FPGA中需要設(shè)計3種控制器,即CMOS采集控制器、SDRAM控制器、TFT液晶顯示控制器。Altera公司提供了SDRAM的控制器,需要根據(jù)具體的SDRAM器件正確配置SDRAM控制器的時間參數(shù),才能正常、穩(wěn)定地工作。本系統(tǒng)采用的SDRAM型號為HY57V561620T-H,其配置參數(shù)如表1所示。
OV2610和TFT液晶的控制器如圖2和圖3所示。兩個控制器都用硬件描述語言寫用戶邏輯,創(chuàng)建Alvalon Slave接口,直接連接到DMA控制器的主端口。通過NiosII CPU數(shù)據(jù)和程序總線寫DMA的控制器字來控制數(shù)據(jù)的采集和顯示。
OV2610的圖像數(shù)據(jù)在TFT液晶屏上顯示時,需要設(shè)計兩個DMA控制器,一個用做圖像數(shù)據(jù)采集通道,一個用做圖像顯示通道。由于OV2610圖像數(shù)據(jù)的接口是數(shù)據(jù)流的形式,用FIFO存儲單元來做緩存與雙口RAM相比,不需要設(shè)計地址發(fā)生器,減少了FPGA內(nèi)部的邏輯綜合布線。具體設(shè)計包括兩部分:第一部分采用硬件描述語言設(shè)計CMOS采集和液晶顯示模塊的時序發(fā)生器;第二部分是在NiosⅡ IDE環(huán)境下,用C語言編寫DMA初始化和控制程序。
CMOS采集時序模塊和TFT液晶時序發(fā)生模塊都需要嚴(yán)格按照CMOS圖像傳感器和TFT液晶顯示的時序設(shè)計。在CMOS采集控制器和液晶控制器的設(shè)計中,關(guān)鍵是設(shè)計好時序產(chǎn)生模塊的邏輯,同時采集和顯示的數(shù)據(jù)需要存儲到資源有限的FIFO中。在EP1C6Q240C8內(nèi)部,由于只有20個M4K的存儲單元,所以資源有限。在CMOS采集控制器中,會占用11位深度2KB的FIFO存儲單元;QVGA分辨率(320×240),液晶顯示模塊要設(shè)計9位深度512B的FIFO存儲單元做顯存才能滿足要求。
用硬件描述語言設(shè)計采集時序模塊和液晶時序發(fā)生模塊的控制器。在Quartus Ⅱ Simulator中模擬的液晶時序發(fā)生控制器波形如圖4所示。
CMOS圖像采集時序與TFT液晶時序類似。
在SOPC平臺中,要設(shè)計CMOS傳感器與Avalon的接口,將數(shù)據(jù)存儲到SDRAM,掛接到Avalon總線上。本系統(tǒng)CMOS采集時序模塊和TFT液晶時序發(fā)生模塊都設(shè)計成為Avalon的從設(shè)備,需要用到address、clk、reset、chipselect、read、readdata、begintransfer、endofpacket引腳。
設(shè)計TFT_LCD與Avalon的接口也需要用到clk、reset、chipselect、address、write、writedata、begintransfer、endofpacket。在SOPCbuilder4.2環(huán)境中可以創(chuàng)建用戶自定義的元件,這里采用HDL文件描述控制器的行為。
數(shù)據(jù)傳輸需要按照Avalon總線從模式傳輸?shù)目偩€接口時序進(jìn)行。從圖5的傳輸時序可以看出,流模式的數(shù)據(jù)傳輸與FIFO的傳輸時序相似,因此在FIFO與Avalon總線的接口上能夠做到無縫連接。這里Avalon總線將FIFO讀入DMA或Nios Ⅱ的主端口的時鐘是內(nèi)部總線的時鐘,本系統(tǒng)采用80MHz。也就是說,用流模式傳輸?shù)淖畲髱捘苓_(dá)到160Mbps,可滿足300萬像素、圖像采集30幀/s的要求,比用PIO方式采集的帶寬要大。圖像采集系統(tǒng)的關(guān)鍵為SDRAM的存儲部分。在SOPC的設(shè)計中,如果更多的主端口掛接到SDRAM控制器上,則SDRAM的仲裁電路消耗的時間就會增加,從而造成SDRAM的數(shù)據(jù)存儲速度下降。當(dāng)連接到SDRAM控制器的主端口過多時,就會成為圖像數(shù)據(jù)傳輸?shù)钠款i。
3 系統(tǒng)軟件設(shè)計
3.1 NiosII IDE軟件環(huán)境
系統(tǒng)硬件要正確運行,還需要在NiosⅡ IDE的軟件環(huán)境中正確地配置兩路DMA的控制寄存器,同時設(shè)計好DMA的源地址和目的地址。
由于Altera為NiosⅡ處理器用戶提供硬件抽象層(HAL)系統(tǒng)庫驅(qū)動程序,允許用戶使用HAL應(yīng)用程序接口(API)函數(shù)訪問外設(shè),所以用戶能方便地操作底層硬件。
本系統(tǒng)設(shè)計中,HAL層采用NiosⅡIDE提供的驅(qū)動程序,在altera_avalon_dma_regs.h文件中定義了各個DMA的控制寄存器和各個位控單元的宏定義,為編程提供了一種標(biāo)準(zhǔn)的頭文件。雖然altera_avalon_dma.c文件中也提供了一些標(biāo)準(zhǔn)的DMA調(diào)用函數(shù),但對系統(tǒng)速度的提高作用不大,而調(diào)用HAL層的宏可以更快地實現(xiàn)DMA的初始化及后續(xù)的圖像數(shù)據(jù)插補。DMA控制器寄存器都是32位,共有8個寄存器(包括與Nios相比新增加的3個寄存器),包括狀態(tài)寄存器、源地址寄存器、目標(biāo)地址寄存器、長度寄存器及控制寄存器等。
3.2 軟件實現(xiàn)流程
實現(xiàn)CMOS圖像采集到液晶顯示的軟件流程如圖6所示。
整個系統(tǒng)中,初始化DMA是關(guān)鍵,其初始化流程如圖7所示。
以下給出DMA初始化的源代碼:
np_dma*dma_cmos_con;
dma_cmos_con=( np_dma*)DMA_0_BASE;
np_dma* pdma=(np_dma*)dma_cmos_con;
alt_irq_register(DMA_0_IRQ,(void*)pdma,(void*)isr_dma);
pdma->np_dmacontrol=0;
pdma->np_dmastatus=0;
pdma->np_dmalength=1600*1200;
pdma->np_dmareadaddress=(int)Sdram_address;
pdma->np_dmawriteaddress=(int)na_cmos_cont;
pdma->np_dmacontrol=
np_dmacontrol_go_mask |
np_dmacontrol_i_en_mask |
np_dmacontrol_byte_mask |
np_dmacontrol_reen_mask |
np_dmacontrol_rcon_mask |
np_dmacontrol_leen_mask;
在注冊DMA設(shè)備的函數(shù)中,NiosⅡ會調(diào)sys_dev_init函數(shù)完成DMA HAL層的初始化,同時指明中斷服務(wù)程序的函數(shù)入口地址,而其他語句主要是完成DMA寄存器的正確配置。
3.3 數(shù)據(jù)整理
采集的原始圖像數(shù)據(jù)為Bayer模式,如表2所示。而采用了CFA技術(shù),則需要轉(zhuǎn)換成BT666的數(shù)據(jù)格式,用于TFT的LCD液晶顯示。由于TFT液晶像素的分辨率為QVGA(320×240),而從圖像傳感器采集到的圖像像素為SVGA(1600×1200),所以需要裁剪原來的圖像。采取了16:1的抽取方式來顯示圖像,這些數(shù)據(jù)的處理都可以在NiosⅡ IDE的軟件環(huán)境中靈活處理。
圖8便是最終調(diào)試采集到的一幅200萬像素的CMOS圖像。它通過在NiosⅡ的環(huán)境中采用PIO內(nèi)核,遵循CompactFlash Card接口協(xié)議模擬出CF卡的控制器,同時在NiosⅡIDE的環(huán)境中通過對采集到的RAW圖像數(shù)據(jù)進(jìn)行整理插補還原,按照FAT16的文件系統(tǒng)寫到CompactFlash Card中。
從采集實驗得到的圖像可以看出,圖像的質(zhì)量很好,圖像的信噪比高。由此在SOPC平臺上開發(fā)圖像的采集和顯示控制器,能增強系統(tǒng)的靈活性和適應(yīng)性。同時,由于一些組織提供了公開的IP核,將其應(yīng)用到自開發(fā)系統(tǒng)上,可以縮短設(shè)計開發(fā)周期,也是一種低成本的途徑。這種'軟'硬件全新的設(shè)計概念,將會在智能測量、自動控制、便攜式儀器儀表等領(lǐng)域得到廣泛應(yīng)用。
參考文獻(xiàn)
[1] 徐寧儀,周祖成.Avalon總線與SOPC系統(tǒng)架構(gòu)實例[J].半導(dǎo)體技術(shù),2003,(2).
[2] 方茁,陳澤文,彭澄廉.SOPC設(shè)計中的用戶自定義邏輯.計算機工程,2004,(17).
[3] ALTERA Coperation.Avalon video input module application note 372 altera(Version 1.0)[Z].2004,12.
[4] ALTERA Copertion.Nios DMA,Data Sheet(Version 1.1)[Z].2003,1.
[5] ALTERA Coperation.Nios software development tutoria (Version 1.2)[Z].2003,5.