李 華,劉 萌
(商洛學(xué)院 物理與電子信息工程系,陜西商洛 726000)
自20世紀(jì)60年代問(wèn)世以來(lái),CMOS圖像傳感器因其體積小、功耗低、工作電壓?jiǎn)我?、抗輻照能力?qiáng)等優(yōu)點(diǎn)使其在成像領(lǐng)域得到了廣泛的應(yīng)用和發(fā)展[1-2],成為現(xiàn)代光電子學(xué)中最活躍、最具影響的應(yīng)用器件之一。隨著基于CMOS圖像探測(cè)器的實(shí)際應(yīng)用越來(lái)越廣,對(duì)其像元輸出信號(hào)進(jìn)行快速采樣、存儲(chǔ)及圖像數(shù)據(jù)處理就顯得尤為必要。傳統(tǒng)的使用單片機(jī)作為控制器對(duì)數(shù)據(jù)進(jìn)行間斷式采集與處理,處理速度較慢,實(shí)時(shí)效果不好[3];而通過(guò)DMA通道將數(shù)據(jù)傳到上位機(jī)由PC機(jī)進(jìn)行處理,占用資源又較大[4];也有用ARM或者FPGA來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,雖然速度和集成度提高了,但是許多都是依靠示波器或數(shù)碼管來(lái)實(shí)現(xiàn)測(cè)量結(jié)果的顯示,功能單一,不利于信號(hào)通信的控制[5]。再加上不同廠家的圖像探測(cè)器輸出圖像的格式又各不相同,傳統(tǒng)方法往往是先按照探測(cè)器輸出的格式采集圖像,再根據(jù)實(shí)際需要進(jìn)行數(shù)據(jù)重組,但是,這種方式得到的圖像存在一定的滯后,在一些對(duì)實(shí)時(shí)性要求較高的場(chǎng)合是遠(yuǎn)遠(yuǎn)不能滿足要求的。另一方面,相比CPU,F(xiàn)PGA集成了多個(gè)運(yùn)算單元,功耗小、體積小、成本低,因此用FPGA硬件實(shí)現(xiàn)圖像采集和處理,并行處理程度高,可實(shí)現(xiàn)圖像的高速處理[6]。本文正是在這樣的背景下,設(shè)計(jì)了一套以FPGA為核心控制單元,結(jié)合SDRAM存儲(chǔ)器的一體化CMOS圖像探測(cè)器實(shí)時(shí)圖像采集系統(tǒng),克服了以上不足,不僅取得了較好的效果,而且該設(shè)計(jì)還具有比較好的通用性。
本系統(tǒng)的總體設(shè)計(jì)方案如圖1所示,整個(gè)系統(tǒng)包括:CMOS圖像探測(cè)器、存儲(chǔ)單元、FPGA控制系統(tǒng)和存儲(chǔ)顯示單元等。其中,CMOS圖像探測(cè)器選用的是DALSA公司的產(chǎn)品,F(xiàn)PGA應(yīng)用Xilinx公司的XC2V3000,SDRAM則是爾必達(dá)公司的EDS5116ABTA-75,且由4片組成,用于完成圖像數(shù)據(jù)的乒乓操作。系統(tǒng)的工作過(guò)程為:首先,F(xiàn)PGA上電穩(wěn)定后根據(jù)外部指令給CMOS圖像探測(cè)器發(fā)出工作狀態(tài)配置參數(shù),然后輸出探測(cè)器正常工作所需的時(shí)序信號(hào),這樣,圖像探測(cè)器就能以2路同時(shí)輸出的形式輸出圖像了,但是這樣的輸出格式圖像采集裝置往往不能實(shí)時(shí)顯示與存儲(chǔ),也給后續(xù)圖像應(yīng)用帶來(lái)不便,為了達(dá)到圖像實(shí)時(shí)、順序輸出的目的,系統(tǒng)將2路輸出圖像送給4片SDRAM進(jìn)行整形,再送給FPGA用于圖像幀頭信息的添加,最后輸出給存儲(chǔ)與顯示單元。在主時(shí)鐘采用100 MHz的情況下,整個(gè)系統(tǒng)滿足了以全幀、20 f·s-1工作模式下圖像的準(zhǔn)確實(shí)時(shí)輸出。
圖1 系統(tǒng)原理框圖
本系統(tǒng)設(shè)計(jì)重點(diǎn)體現(xiàn)在兩方面,分別是基于Verilog-HDL硬件描述語(yǔ)言[7]的SDRAM及乒乓操作設(shè)計(jì)和圖像幀頭信息的添加設(shè)計(jì)。
不斷的輸出圖像了,但是,由于本文圖像探測(cè)器采用的是圖像雙路同時(shí)輸出的模式,所以,一次輸出的是奇偶兩行數(shù)據(jù),對(duì)于目前大部分圖像采集卡,這種格式的圖像是不易直接采集與應(yīng)用的,因此要進(jìn)行圖像數(shù)據(jù)的整形操作。
與大多數(shù)CMOS圖像探測(cè)器一樣,本文探測(cè)器的工作過(guò)程分為兩部分——工作參數(shù)的配置和數(shù)據(jù)的輸出。由于探測(cè)器工作參數(shù)的配置設(shè)計(jì)比較簡(jiǎn)單,按照手冊(cè)進(jìn)行即可,因此,本文主要研究圖像數(shù)據(jù)的處理。
按照手冊(cè)為探測(cè)器提供時(shí)序,并以2352*1728大小循環(huán)工作,就可以讓探測(cè)器連續(xù)
2.2.1 SDRAM時(shí)序設(shè)計(jì)
SDRAM是一種應(yīng)用廣泛的存儲(chǔ)器,具有容量大、數(shù)據(jù)讀寫(xiě)速度快等優(yōu)點(diǎn),特別適合圖像等需要海量存儲(chǔ)的應(yīng)用領(lǐng)域[8]。SDRAM內(nèi)部存儲(chǔ)單元由若干個(gè)相當(dāng)于矩陣的bank組成。行地址就是矩陣的行元素,列地址相當(dāng)于矩陣的列元素。因此給定的bank地址結(jié)合行地址和列地址就能唯一的指定一個(gè)存取單元。
SDRAM的工作過(guò)程與其它存儲(chǔ)器件不同之處在于,系統(tǒng)剛上電初始化完成后,所有的行都處于非活動(dòng)狀態(tài),不能進(jìn)行相應(yīng)的讀寫(xiě)操作,這時(shí)就需要先激活相應(yīng)的行,并經(jīng)過(guò)從行地址選擇到列地址選擇的延遲之后,才可以根據(jù)read/write請(qǐng)求信號(hào)決定SDRAM將要進(jìn)行數(shù)據(jù)讀操作還是數(shù)據(jù)寫(xiě)操作。
本文SDRAM控制時(shí)序主要由三部分組成:狀態(tài)控制模塊、命令產(chǎn)生模塊和圖像數(shù)據(jù)存取模塊。狀態(tài)控制模塊由初始狀態(tài)機(jī)和工作狀態(tài)控制狀態(tài)機(jī)構(gòu)成,它是SDRAM系統(tǒng)設(shè)計(jì)的核心,可以根據(jù)需要完成相應(yīng)狀態(tài)的切換;命令產(chǎn)生模塊主要是根據(jù)SDRAM的工作狀態(tài)產(chǎn)生SDRAM需要的命令信號(hào);而圖像數(shù)據(jù)存取模塊主要是根據(jù)控制邏輯對(duì)探測(cè)器輸出的圖像數(shù)據(jù)進(jìn)行SDRAM的寫(xiě)入或讀出。
分析SDRAM的工作原理可知,它之所以不會(huì)發(fā)生數(shù)據(jù)丟失的情況是因?yàn)閷?duì)存儲(chǔ)體電容定時(shí)充電刷新的緣故,因此SDRAM工作時(shí)的刷新操作是至關(guān)重要的。SDRAM的刷新操作,本文在設(shè)計(jì)上分兩種情況進(jìn)行研究,對(duì)于沒(méi)有圖像時(shí)的刷新,采用每7.5 μs刷新一次的形式,這樣,64 ms內(nèi)刷新的次數(shù)為8533次,滿足SDRAM不丟失數(shù)據(jù)8192次的最少刷新次數(shù)[9]。而對(duì)于正常工作時(shí)的刷新,則采用在圖像幀逆程期間刷新的方式,本設(shè)計(jì)圖像的幀逆程時(shí)間為25 ms左右,因此,幀逆程內(nèi)每3 μs刷新1次,滿足SDRAM最小刷新間隔67.5 ns的要求,這樣,一幀圖像幀逆程的刷新次數(shù)就是8333,滿足64 ms刷新8192次的要求,同時(shí)滿足20 f·s-1的輸出需要。
本文圖像探測(cè)器在全幀模式時(shí)輸出一行圖像的長(zhǎng)度是2352,而SDRAM一行的長(zhǎng)度是1024,因此,一行圖像的長(zhǎng)度是SDRAM一行存儲(chǔ)深度的2倍多,本文SDRAM采用了full page burst工作模式,即一次對(duì)SDRAM的一行進(jìn)行讀寫(xiě)操作,具體的工作狀態(tài)與過(guò)程如圖2所示。
圖2 SDRAM的工作狀態(tài)與過(guò)程
由圖2可以看出,當(dāng)SDRAM讀寫(xiě)完一行1024×10 bits后,要進(jìn)行 Burst Stop 操作,再對(duì)SDRAM進(jìn)行刷新,然后讀寫(xiě)下一行。由于探測(cè)器輸出的一行圖像2352個(gè)數(shù)據(jù)是連續(xù)的,而這些圖像數(shù)據(jù)在SDRAM讀寫(xiě)的過(guò)程中被分成兩個(gè)1024長(zhǎng)度的數(shù)據(jù)和一個(gè)304長(zhǎng)度的數(shù)據(jù),中間是Burst Stop等行間隔狀態(tài),所以,兩者之間就存在了速度上的不匹配,這里就要用到FIFO,當(dāng)然,F(xiàn)IFO的深度不需要很深,由于一次Burst Stop和刷新操作的時(shí)間約為15個(gè)時(shí)鐘,所以,本文FIFO的深度設(shè)為20*3個(gè)時(shí)鐘即可,如圖3所示。具體設(shè)計(jì)上,以寫(xiě)數(shù)據(jù)為例,當(dāng)工作狀態(tài)是Burst Stop和刷新時(shí),將FIFO讀使能信號(hào)禁止,終止讀操作,使圖像數(shù)據(jù)在FIFO中緩存,當(dāng)進(jìn)入下一行寫(xiě)狀態(tài)時(shí)再恢復(fù)讀使能,而且在一行圖像的逆程期間還要對(duì)FIFO進(jìn)行復(fù)位,保證了數(shù)據(jù)的連續(xù)性與準(zhǔn)確性。這樣,探測(cè)器的數(shù)據(jù)就能完整無(wú)誤的在SDRAM中寫(xiě)入與讀出了。
圖3 寫(xiě)一行1024個(gè)數(shù)據(jù)后進(jìn)行Burst stop操作的仿真波形
2.2.2 基于SDRAM的乒乓操作
為了達(dá)到實(shí)時(shí)、順序輸出圖像數(shù)據(jù)的目的,本文設(shè)計(jì)應(yīng)用了4片SDRAM進(jìn)行乒乓操作,如圖1所示。具體的工作過(guò)程為:圖像探測(cè)器在時(shí)序驅(qū)動(dòng)下,奇、偶行圖像數(shù)據(jù)從兩個(gè)輸出通道同時(shí)輸出,首先將第1幀圖像的奇數(shù)行圖像存儲(chǔ)在SDRAM A(a),將偶數(shù)行圖像存儲(chǔ)在SDRAM A(b),當(dāng)存儲(chǔ)完第1幀后,在圖像幀逆程期間切換讀寫(xiě)關(guān)系,將第2幀圖像的奇數(shù)行數(shù)據(jù)存儲(chǔ)在SDRAM B(a)中,同時(shí)將偶數(shù)行數(shù)據(jù)存儲(chǔ)到SDRAM B(b)中,與此同時(shí),對(duì)SDRAM A(a)和SDRAM A(b)進(jìn)行乒乓讀操作,即在奇數(shù)行時(shí)讀SDRAM A(a)的圖像數(shù)據(jù),在偶數(shù)行時(shí)讀SDRAM A(b)的圖像數(shù)據(jù),進(jìn)行拼接,完成圖像的順序輸出。當(dāng)存儲(chǔ)完第2幀圖像后,再將第3幀圖像存儲(chǔ)在SDRAM A(a)和SDRAM A(b),同時(shí)乒乓讀取SDRAM B(a)和SDRAM B(b)中的第2幀數(shù)據(jù),順序輸出。如此反復(fù)就完成了圖像數(shù)據(jù)的實(shí)時(shí)順序輸出,達(dá)到圖像數(shù)據(jù)整形的目的。
經(jīng)過(guò)數(shù)據(jù)整形后,圖像已經(jīng)能夠?qū)崟r(shí)的顯示和存儲(chǔ)了,但是,為了研究上的方便,通常還要將圖像的一些拍攝條件信息,比如:拍攝時(shí)間、圖像的曝光時(shí)間、增益、級(jí)數(shù)等附加在單幀圖像里,本文是附加在每一幀圖像的前兩行,簡(jiǎn)稱幀頭。圖像幀頭信息添加功能本文設(shè)計(jì)中是在FPGA內(nèi)完成的,具體設(shè)計(jì)過(guò)程是:當(dāng)圖像經(jīng)過(guò)整形,順序進(jìn)入FPGA,由于本文圖像探測(cè)器的前兩行原始圖像是無(wú)效數(shù)據(jù),剛好可以用來(lái)填充信息,所以在FPGA內(nèi)首先開(kāi)辟一小塊區(qū)域,本文是一個(gè)10*10 bits的FIFO,將圖像進(jìn)行緩存,當(dāng)發(fā)現(xiàn)圖像第一個(gè)行有效信號(hào)的上升沿到來(lái)時(shí),將需要添加的幀頭信息逐一開(kāi)始加載,同時(shí)生成行有效信號(hào),同樣的方法添加第二行幀頭信息,當(dāng)兩行的幀頭數(shù)據(jù)加載完畢后,再將有效的圖像數(shù)據(jù)按照?qǐng)D像探測(cè)器的輸出格式緊跟在幀頭信息的后面,從而完成幀頭數(shù)據(jù)的添加。
按照本文關(guān)鍵技術(shù)設(shè)計(jì)的思路對(duì)系統(tǒng)進(jìn)行了詳細(xì)設(shè)計(jì),整個(gè)系統(tǒng)以一片F(xiàn)PGA為核心進(jìn)行展開(kāi),采用Verilog HDL硬件描述語(yǔ)言以“自頂向下”的方式,并結(jié)合狀態(tài)機(jī)、流水線等技術(shù)對(duì)系統(tǒng)功能進(jìn)行了設(shè)計(jì)。實(shí)驗(yàn)表明,系統(tǒng)工作正常穩(wěn)定,結(jié)合光機(jī)系統(tǒng)進(jìn)行了實(shí)際成像試驗(yàn),設(shè)置為全幀模式,在曝光時(shí)間為20 ms、幀頻為20 f·s-1時(shí)拍攝得到的外景圖像如圖4所示。
從圖4可以看出,得到的實(shí)時(shí)圖像完整、清晰,充分證明了設(shè)計(jì)的可行性。由于添加了兩行幀頭信息,而它和整幅圖像的數(shù)據(jù)沒(méi)有聯(lián)系,所以反映到圖像里是最上面兩行不規(guī)律變化的線。
圖4 實(shí)際拍攝的外景圖像
本文提出了一種以FPGA為核心器件的CMOS圖像探測(cè)器一體化實(shí)時(shí)圖像采集系統(tǒng),該系統(tǒng)不僅能為探測(cè)器提供時(shí)序,而且增加了基于4片SDRAM的圖像數(shù)據(jù)整形功能和圖像幀頭信息添加功能,滿足了用戶對(duì)圖像準(zhǔn)確性和實(shí)時(shí)性的要求,目前,該系統(tǒng)已經(jīng)應(yīng)用于工程,取得了不錯(cuò)的效果。值得注意的是,本文設(shè)計(jì)雖然是基于DALSA公司圖像探測(cè)器開(kāi)發(fā)的系統(tǒng),但是分析不難發(fā)現(xiàn),該設(shè)計(jì)只要根據(jù)實(shí)際應(yīng)用稍加修改就能適應(yīng)任何一款同時(shí)輸出兩路數(shù)據(jù)的CCD/CMOS圖像探測(cè)器采集系統(tǒng),具有良好的通用性。
[1]余輝龍.CMOS一體化相機(jī)關(guān)鍵技術(shù)研究[D].中國(guó)科學(xué)院長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,2010.
[2]林 凡,吳孫桃,郭東輝.CMOS圖像傳感器技術(shù)及其研究進(jìn)展[J].半導(dǎo)體技術(shù),2006,26(12):40-44.
[3]徐大成,翁桂榮.線陣CCD數(shù)據(jù)的高速采集系統(tǒng)[J].傳感器技術(shù),2002(9):25-28.
[4]劉 爽,趙凱生,龍?jiān)俅?等.基于ARM和FPGA的嵌入式CCD采集系統(tǒng)[J].光電子·激光,2007,18(11):1296-1298.
[5]魏常偉,袁縱橫,張文濤,等.基于FPGA的新型高速CCD圖像數(shù)據(jù)采集系統(tǒng)[J].測(cè)控技術(shù)與儀器儀表,2010(4):77-80.
[6]楊健鷙,劉 霖.基于FPGA的面陣CCD圖像采集系統(tǒng)[J].電子器件,2013,36(1):49-53.
[7]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2003:87-176.
[8]李 華.基于SDRAM的Bayer格式圖像插值算法硬件設(shè)計(jì)[J].電視技術(shù),2013,37(5):49-51.
[9]EDS5116ABTA-75 Datasheet[R].Elpida Memory,Inc,2002.