何 鑫,景金榮,張會新,劉文怡,熊繼軍,洪應(yīng)平
(中北大學(xué)儀器科學(xué)與動態(tài)測試教育部重點實驗室,山西 太原 030051)
得益于大規(guī)模集成電路技術(shù)和精密加工技術(shù)的發(fā)展,越來越多基于CMOS 工藝的圖像傳感器誕生[1-2]。近年來,CMOS 圖像傳感器(CMOS Image Sensor)的大部分性能指標基本超過CCD(Charge Coupled Device,CCD)圖像傳感器,在醫(yī)療、工業(yè)、交通及航空等不同領(lǐng)域都得到了廣泛的應(yīng)用[3-6]。
NanEyeM 是艾邁斯半導(dǎo)體公司推出的微型串行CMOS 圖像傳感器,其面積大小只有1 mm2,通過LVDS(Low-Voltage Differential Signaling)接口可對外提供320×320 像素分辨率的圖像,在65 MHz 時鐘下最大圖像輸出幀率為49 FPS,可應(yīng)用于醫(yī)療、科研等對傳感器體積大小有嚴格要求的領(lǐng)域。但其內(nèi)部未集成ISP(Image Signal Processing,ISP),數(shù)據(jù)輸出為曼徹斯特編碼的高速異步串行碼流。因此,該傳感器的圖像數(shù)據(jù)解碼較為困難,且無法直接輸出RGB 圖像。目前市面上也沒有適用于該傳感器的接口轉(zhuǎn)換芯片,相關(guān)研究較為缺乏,國內(nèi)只有華中師范大學(xué)的石汶奇等人[7]設(shè)計過基于FPGA 的NanEye 2D 圖像傳感器的數(shù)據(jù)采集IP,但該IP 無法適用于NanEyeM 圖像傳感器,且只具有數(shù)據(jù)接收功能,需要配合電腦才能對圖像進行轉(zhuǎn)換及顯示,具有一定的局限性。
為解決上述技術(shù)難題,本文對NanEyeM 圖像傳感器的異步串行通信、圖像數(shù)據(jù)特點進行了研究分析,提出了一種高速實時圖像數(shù)據(jù)解碼方法,設(shè)計和實現(xiàn)了基于動態(tài)脈寬匹配、邊沿跟隨的新型數(shù)據(jù)解碼算法,該算法在對數(shù)據(jù)進行解碼的同時可將Bayer圖像轉(zhuǎn)換為RGB 圖像,實現(xiàn)了串行圖像傳感器直接輸出RGB 圖像的功能。并在Xilinx 公司的FPGA平臺上進行了測試驗證。該算法能夠?qū)崿F(xiàn)圖像數(shù)據(jù)的解碼,輸出RGB 圖像,對于NanEyeM 圖像傳感器的推廣應(yīng)用具有重要意義。
NanEyeM 圖像傳感器內(nèi)部集成10 位分辨率模數(shù)轉(zhuǎn)換器(Analog-to-Digital Converter,ADC),可通過2 線LVDS 接口以9 FPS~49 FPS 的幀率串行向外傳輸320×320 pixel 分辨率的圖像數(shù)據(jù)。
如圖1 所示,該傳感器共有四種工作模式,分別為配置模式、同步模式、延遲模式以及輸出模式。初始上電時,傳感器在時長為648 PP(1PP 為12 bit數(shù)據(jù)時長)的配置模式中循環(huán),在該模式下控制端可通過LVDS 接口對傳感器進行參數(shù)上的配置,通過對配置寄存器的空閑模式位寫“1”可退出配置模式,進入四種模式的循環(huán)中。在同步模式和延遲模式下,傳感器將持續(xù)輸出同步字,數(shù)據(jù)接收端可從同步字中提取數(shù)據(jù)編碼時鐘信息,用于數(shù)據(jù)的解碼以及采樣。經(jīng)過648 PP 的同步階段以及2×328 PP 至498×328 PP 的延遲階段后,傳感器進入到輸出模式,在該模式下串行輸出320×320 pixel 分辨率圖像數(shù)據(jù),在每一幀圖像數(shù)據(jù)尾部都附加有長度為7 PP的幀結(jié)束標志,用于檢查圖像數(shù)據(jù)傳輸?shù)恼_性。
圖1 圖像傳感器工作模式轉(zhuǎn)換圖
該圖像傳感器使用異步串行方式進行數(shù)據(jù)傳輸,每個像素數(shù)據(jù)由12 bit 組成,其中有效數(shù)據(jù)位占據(jù)中間10 bit,高位在前,數(shù)據(jù)傳輸起始以電平“1”表示,傳輸結(jié)束以電平“0”表示。圖像數(shù)據(jù)格式如圖2 所示。
圖2 圖像數(shù)據(jù)格式
如圖3 所示,圖像傳感器使用曼徹斯特編碼方式對圖像數(shù)據(jù)進行編碼,即將數(shù)據(jù)與內(nèi)部編碼時鐘進行異或操作,使用上升沿(“01”)表示數(shù)據(jù)“1”,下降沿(“10”)表示數(shù)據(jù)“0”[8]。例如原始數(shù)據(jù)“101110110010”,經(jīng)曼徹斯特編碼后則變?yōu)椤?11001010110010110100110”。
圖3 曼徹斯特編碼
NanEyeM 圖像傳感器內(nèi)部未集成ISP 單元,其輸出的是Bayer 格式的RAW 圖像,需要進行圖像格式轉(zhuǎn)換,將Bayer 格式轉(zhuǎn)為RGB 格式。
對曼徹斯特編碼后的數(shù)據(jù)進行分析,編碼后的串行數(shù)據(jù)可以分為兩種電平數(shù)據(jù),如圖4 所示。一種為L_BIT(長周期高(低)電平),其電平維持時間為一個編碼時鐘周期;另一種為S_BIT(短周期高(低)電平),其電平維持時間為半個編碼時鐘周期。
圖4 兩種曼徹斯特電平碼流
為了對圖像傳感器輸出的曼徹斯特編碼數(shù)據(jù)進行解碼,需要對數(shù)據(jù)電平脈寬進行持續(xù)測量,并與編碼時鐘周期進行比較。L_BIT 表示原始數(shù)據(jù)電平值發(fā)生變化,S_BIT 表示原始數(shù)據(jù)電平值未發(fā)生變化。NanEyeM 圖像傳感器在每次數(shù)據(jù)傳輸前都會進入時長為648 PP 的配置模式,此時傳感器的數(shù)據(jù)線維持低電平狀態(tài),即信號的初始電平已知,對數(shù)據(jù)的跳變沿進行跟隨同時判斷電平脈寬即可還原原始數(shù)據(jù)。
通過上述分析可知,對數(shù)據(jù)進行正確解碼的前提是對原始編碼時鐘周期進行正確測量。在同步模式下和延遲模式下,NanEyeM 圖像傳感器會持續(xù)輸出同步字,其格式如圖5 所示。
圖5 同步字格式
由曼徹斯特編碼特點可知,數(shù)據(jù)“0”被編碼為下降沿“10”,因此同步字在經(jīng)曼徹斯特編碼后波形與編碼時鐘保持一致,如圖6 所示。此時的數(shù)據(jù)可認為是數(shù)據(jù)編碼時鐘,測量同步字的周期即可以得到數(shù)據(jù)編碼時鐘的周期。
圖6 同步字編碼后波形
在一般的低速異步串行通信中,由于其速度較低,采樣容差區(qū)間大,可由接收端按通信波特率生成采樣信號對數(shù)據(jù)進行采樣還原[9]。然而NanEyeM圖像傳感器的數(shù)據(jù)輸出速率高達幾MHz 至幾十MHz,若直接由接收端生成采樣信號,則對系統(tǒng)運行頻率要求較高,實現(xiàn)難度大。另外雖然可以從曼徹斯特數(shù)據(jù)流中恢復(fù)出時鐘信息,但由于傳感器內(nèi)部存在的時鐘抖動、線路傳輸時延、數(shù)據(jù)耦合干擾以及系統(tǒng)運行頻率受限等問題,由接收端恢復(fù)出的原始時鐘始終與傳感器內(nèi)部的時鐘存在周期誤差及相位誤差,且誤差會隨時間累積。誤差的存在將導(dǎo)致數(shù)據(jù)解碼錯誤,所以由接收端恢復(fù)的時鐘不能用做數(shù)據(jù)采樣信號。
如圖7 所示,曼徹斯特編碼后數(shù)據(jù)總是在原始數(shù)據(jù)的中間時刻發(fā)生電平跳變。而在串行通信中,為了確保采樣電平數(shù)據(jù)的正確性、可靠性,往往在數(shù)據(jù)位時間的中間時刻對信號進行采樣。因此,編碼數(shù)據(jù)的跳變沿可作為解碼數(shù)據(jù)的采樣信號。另外,由曼徹斯特編碼特點可知,電平“1”被編碼成下降沿,電平“0”被編碼成上升沿,則當(dāng)解碼數(shù)據(jù)為電平“1”時,使用編碼數(shù)據(jù)下降沿采樣,當(dāng)解碼數(shù)據(jù)為電平“0”時,使用編碼數(shù)據(jù)上升沿采樣。
圖7 數(shù)據(jù)采樣信號提取
NanEyeM 在黑白圖像傳感器的基礎(chǔ)上增加了色彩濾波陣列(CFA),從而使傳感器可以輸出Bayer格式的彩色圖像[10]。該傳感器內(nèi)部使用的色彩濾波陣列如圖8 所示,左下角為第一個輸出像素。
圖8 傳感器內(nèi)部色彩濾波陣列
Bayer 格式圖像特點為每個像素點只含有RGB顏色空間中的一種分量,需要使用插值算法對像素點插值處理,補全缺失的另外兩種顏色分量,將Bayer 格式轉(zhuǎn)換為RGB 格式[11]。
對Bayer 格式圖像數(shù)據(jù)進行分析,可以發(fā)現(xiàn),在對像素進行插值處理時,共有四種可能的情況,如圖9 所示[12]。
圖9 插值時四種情況
基于硬件可行性考慮,在設(shè)計中采用線性插值方式完成圖像格式轉(zhuǎn)換[13]。在圖9 的每一種情況中,4 個像素點構(gòu)成一個2×2 像素矩陣,以矩陣左下角第一個像素為零點,向右、向上像素坐標遞增,則有Bayer 轉(zhuǎn)RGB 公式:
式中:R、G、B 分別表示RGB 顏色空間中的三種顏色分量。
NanEyeM 圖像傳感器圖像解碼算法使用Verilog硬件描述語言實現(xiàn),采用自頂向下的設(shè)計方法[14]。算法由SerialSync(串行同步模塊)、ClkExtract(時鐘提取模塊)、SensorDataDecoder(傳感器數(shù)據(jù)解碼模塊)、Bayer2RGB(Bayer 轉(zhuǎn)RGB 模塊)共4 個模塊組成。每個模塊實現(xiàn)算法的特定功能,算法整體框架如圖10 所示。
圖10 算法整體框圖
由于NanEyeM 圖像傳感器與FPGA 是兩個完全獨立的設(shè)備,其各自內(nèi)部工作時鐘在頻率、相位上都是異步的。當(dāng)異步信號直接輸入FPGA 內(nèi)部寄存器時,極大可能引起寄存器亞穩(wěn)態(tài)問題,導(dǎo)致數(shù)據(jù)錯誤[15]。因此,使用數(shù)據(jù)同步模塊將傳感器輸入的異步信號進行同步處理,最大限度降低寄存器出現(xiàn)亞穩(wěn)態(tài)的可能性,保證數(shù)據(jù)的可靠性。同步模塊采用雙鎖存器法實現(xiàn),硬件原理如圖11 所示。兩個級聯(lián)鎖存器對輸入信號連續(xù)鎖存兩次,研究表明該設(shè)計可以將亞穩(wěn)態(tài)出現(xiàn)的機率降低到一個極小的程度[16]。
圖11 雙鎖存器同步原理圖
編碼時鐘周期信息提取模塊主要為移位寄存器、邊沿檢測模塊及周期計數(shù)器組成。在配置模式下,傳感器保持低電平輸出,完成對傳感器的配置并退出配置模式后,同步模式開始。在檢測到第一個同步字的上升沿后,周期計數(shù)器在本地時鐘信號的控制下開始計數(shù),記為Tperiod_cnt,同時另一計數(shù)器開始統(tǒng)計數(shù)據(jù)的上升沿個數(shù),記為Tpdg_cnt。當(dāng)Tpdg_cnt=1 024,即統(tǒng)計了1 024 個編碼時鐘周期后,計數(shù)器停止計數(shù),取周期計數(shù)器的平均值Tperiod_cnt/1 024 作為編碼時鐘周期,設(shè)計中使用取計數(shù)器值高位(Tperiod_cnt[23:11])的方式完成該計算。
數(shù)據(jù)的解碼首先需要對傳感器輸出的曼徹斯特編碼的數(shù)據(jù)流進行還原,之后在采樣信號的驅(qū)動下將串行數(shù)據(jù)轉(zhuǎn)為并行數(shù)據(jù)。解碼時使用有限狀態(tài)機對碼流跳變沿進行跟隨,狀態(tài)機狀態(tài)定義及轉(zhuǎn)換條件如圖12 所示。系統(tǒng)初始狀態(tài)為CLK_LOCK 狀態(tài),當(dāng)時鐘提取模塊完成對時鐘信息的提取后,跳轉(zhuǎn)到IDLE 狀態(tài)。檢測到數(shù)據(jù)的上升沿后,跳轉(zhuǎn)到JUDGE_HIGH 狀態(tài),對數(shù)據(jù)的高電平脈寬進行判斷,解碼出原始數(shù)據(jù)。若此時檢測到數(shù)據(jù)下降沿,則跳轉(zhuǎn)到JUDGE_LOW 狀態(tài),對輸入數(shù)據(jù)的低電平時長進行判斷,解碼出原始數(shù)據(jù)。同時若連續(xù)10 次采樣輸入數(shù)據(jù)都為低電平,則可以判斷本次數(shù)據(jù)幀傳輸完成,重新回到CLK_LOCK 狀態(tài)。
圖12 解碼狀態(tài)機
另外,為了解決傳感器內(nèi)部存在的時鐘抖動、數(shù)據(jù)傳輸時延、信號耦合干擾等問題所帶來的數(shù)據(jù)脈寬變化問題,設(shè)計引入了動態(tài)脈寬調(diào)節(jié)算法,每次接收數(shù)據(jù)之前都利用傳感器的同步字對解碼的脈寬閾值進行重新標定,以保證數(shù)據(jù)解碼的正確性。
串行數(shù)據(jù)轉(zhuǎn)并行數(shù)據(jù)的功能使用12 bit 的移位寄存器(RecvShiftReg)和位接收計數(shù)器(RecvBitCnt)實現(xiàn)。由傳感器輸出的數(shù)據(jù)格式可知,當(dāng)檢測到第一個高電平時,數(shù)據(jù)傳輸開始,移位寄存器開始在數(shù)據(jù)采樣時鐘(SampleClk)的驅(qū)動下對解碼后的數(shù)據(jù)進行移位采樣,同時位接收計數(shù)器(RecvBitCnt)開始統(tǒng)計接收到的數(shù)據(jù)位數(shù)。
如圖13 所示,當(dāng)移位寄存器的值與數(shù)據(jù)匹配模版“1XXXXXXXXXX0”匹配,且位接收計數(shù)器的位為12 時,提取出中間的10 位有效數(shù)據(jù),同時數(shù)據(jù)有效信號(RawDataValid)置高一個時鐘周期,清零位接收計數(shù)器,為接收下一個數(shù)據(jù)作準備。若移位寄存器中的值全為0,說明一行圖像數(shù)據(jù)傳輸完成,復(fù)位所有寄存器,保證下一次的數(shù)據(jù)能被正確接收。
圖13 數(shù)據(jù)提取原理
本設(shè)計中使用行列計數(shù)器PixelX、PixelY 分別對接收圖像數(shù)據(jù)的行像素及列像素進行計數(shù)。NanEyeM 圖像傳感器的有效像素大小為320×320 pixel,因此,行計數(shù)器PixelX 在每320 個像素后清零,同時列計數(shù)器PixelY 加一。
如圖14 所示,使用兩個長度為320 pixel、位寬為10B 的線性移位寄存器緩存兩行圖像數(shù)據(jù),實現(xiàn)線性插值算法。線性移位寄存器在數(shù)據(jù)有效信號(Raw-DataValid)的驅(qū)動下從尾部移入新數(shù)據(jù),從頭部移出舊數(shù)據(jù)。另外使用兩個獨立寄存器D00、D10 分別存儲從兩個線性移位寄存器移出的像素值,與兩個線性移位寄存器的頭部值D01、D11 組成2×2 大小的像素矩陣。最后由{PixelX[0],PixelY[0]}的值對比圖9即確定當(dāng)前狀態(tài),再依據(jù)Bayer 轉(zhuǎn)RGB 公式完成圖像格式轉(zhuǎn)換功能。
圖14 移位寄存器連接方式
在進行圖像格式轉(zhuǎn)換的同時,該模塊也通過行列計數(shù)器PixelX、PixelY 的值在正確的時刻輸出圖像行同步和場同步信號,用于后續(xù)圖像輸出顯示。
本算法使用Verilog 語言編寫,并基于Xilix 公司的Spartan-6 系列FPGA 平臺上實現(xiàn),使用ISE14.7 內(nèi)部自帶的仿真軟件ISim 進行算法的時序仿真,結(jié)果如圖15、圖16 所示。
圖15 數(shù)據(jù)解碼模塊仿真圖
圖16 Bayer 轉(zhuǎn)RGB 模塊仿真圖
由仿真圖可以看出,數(shù)據(jù)解碼模塊和Bayer 轉(zhuǎn)RGB 模塊都能正確連續(xù)地輸出結(jié)果,且各模塊輸出值與理論值相符,達到了本文設(shè)計目標。
使用圖像傳感器對不同物體進行拍攝,經(jīng)過算法解碼后的圖像為標準的RGB 視頻流,可直接使用驅(qū)動模塊將圖像輸出到顯示器上顯示,并使用截屏軟件進行截屏。圖17(a)為NanEeyM 圖像傳感器實物,圖17(b)為手部皮膚紋理,圖17(c)為拍攝訂書針包裝盒。從截取的圖像中可以看出,該算法能正確地接收并解碼傳感器圖像數(shù)據(jù),且解碼轉(zhuǎn)換后的圖像紋理清晰,色彩還原度較高,也能正確流暢地輸出RGB 圖像。
圖17 NanEyeM 圖像傳感器外形圖及其拍攝的圖像
本文提出了一種NanEyeM 微型圖像傳感器的數(shù)據(jù)解碼轉(zhuǎn)換算法,并基于Xilinx 公司的Spartan-6系列FPGA 在硬件上實現(xiàn)了該算法。測試結(jié)果證明,當(dāng)傳感器工作在高速模式下,以24 frame/s 的幀速率輸出圖像數(shù)據(jù)時,算法能夠正確、連續(xù)地對數(shù)據(jù)進行解碼并輸出RGB 圖像。結(jié)果表明,本算法很好地解決了NanEyeM 微型圖像傳感器高速異步串行數(shù)據(jù)的解碼難問題及無內(nèi)置ISP 導(dǎo)致的無法直接輸出RGB 圖像問題,為后續(xù)開發(fā)基于該圖像傳感器的應(yīng)用奠定了重要基礎(chǔ)。