何 鑫,景金榮,張會新,劉文怡,熊繼軍,洪應平
(中北大學儀器科學與動態測試教育部重點實驗室,山西 太原 030051)
得益于大規模集成電路技術和精密加工技術的發展,越來越多基于CMOS 工藝的圖像傳感器誕生[1-2]。近年來,CMOS 圖像傳感器(CMOS Image Sensor)的大部分性能指標基本超過CCD(Charge Coupled Device,CCD)圖像傳感器,在醫療、工業、交通及航空等不同領域都得到了廣泛的應用[3-6]。
NanEyeM 是艾邁斯半導體公司推出的微型串行CMOS 圖像傳感器,其面積大小只有1 mm2,通過LVDS(Low-Voltage Differential Signaling)接口可對外提供320×320 像素分辨率的圖像,在65 MHz 時鐘下最大圖像輸出幀率為49 FPS,可應用于醫療、科研等對傳感器體積大小有嚴格要求的領域。但其內部未集成ISP(Image Signal Processing,ISP),數據輸出為曼徹斯特編碼的高速異步串行碼流。因此,該傳感器的圖像數據解碼較為困難,且無法直接輸出RGB 圖像。目前市面上也沒有適用于該傳感器的接口轉換芯片,相關研究較為缺乏,國內只有華中師范大學的石汶奇等人[7]設計過基于FPGA 的NanEye 2D 圖像傳感器的數據采集IP,但該IP 無法適用于NanEyeM 圖像傳感器,且只具有數據接收功能,需要配合電腦才能對圖像進行轉換及顯示,具有一定的局限性。
為解決上述技術難題,本文對NanEyeM 圖像傳感器的異步串行通信、圖像數據特點進行了研究分析,提出了一種高速實時圖像數據解碼方法,設計和實現了基于動態脈寬匹配、邊沿跟隨的新型數據解碼算法,該算法在對數據進行解碼的同時可將Bayer圖像轉換為RGB 圖像,實現了串行圖像傳感器直接輸出RGB 圖像的功能。并在Xilinx 公司的FPGA平臺上進行了測試驗證。該算法能夠實現圖像數據的解碼,輸出RGB 圖像,對于NanEyeM 圖像傳感器的推廣應用具有重要意義。
NanEyeM 圖像傳感器內部集成10 位分辨率模數轉換器(Analog-to-Digital Converter,ADC),可通過2 線LVDS 接口以9 FPS~49 FPS 的幀率串行向外傳輸320×320 pixel 分辨率的圖像數據。
如圖1 所示,該傳感器共有四種工作模式,分別為配置模式、同步模式、延遲模式以及輸出模式。初始上電時,傳感器在時長為648 PP(1PP 為12 bit數據時長)的配置模式中循環,在該模式下控制端可通過LVDS 接口對傳感器進行參數上的配置,通過對配置寄存器的空閑模式位寫“1”可退出配置模式,進入四種模式的循環中。在同步模式和延遲模式下,傳感器將持續輸出同步字,數據接收端可從同步字中提取數據編碼時鐘信息,用于數據的解碼以及采樣。經過648 PP 的同步階段以及2×328 PP 至498×328 PP 的延遲階段后,傳感器進入到輸出模式,在該模式下串行輸出320×320 pixel 分辨率圖像數據,在每一幀圖像數據尾部都附加有長度為7 PP的幀結束標志,用于檢查圖像數據傳輸的正確性。

圖1 圖像傳感器工作模式轉換圖
該圖像傳感器使用異步串行方式進行數據傳輸,每個像素數據由12 bit 組成,其中有效數據位占據中間10 bit,高位在前,數據傳輸起始以電平“1”表示,傳輸結束以電平“0”表示。圖像數據格式如圖2 所示。

圖2 圖像數據格式
如圖3 所示,圖像傳感器使用曼徹斯特編碼方式對圖像數據進行編碼,即將數據與內部編碼時鐘進行異或操作,使用上升沿(“01”)表示數據“1”,下降沿(“10”)表示數據“0”[8]。例如原始數據“101110110010”,經曼徹斯特編碼后則變為“011001010110010110100110”。

圖3 曼徹斯特編碼
NanEyeM 圖像傳感器內部未集成ISP 單元,其輸出的是Bayer 格式的RAW 圖像,需要進行圖像格式轉換,將Bayer 格式轉為RGB 格式。
對曼徹斯特編碼后的數據進行分析,編碼后的串行數據可以分為兩種電平數據,如圖4 所示。一種為L_BIT(長周期高(低)電平),其電平維持時間為一個編碼時鐘周期;另一種為S_BIT(短周期高(低)電平),其電平維持時間為半個編碼時鐘周期。

圖4 兩種曼徹斯特電平碼流
為了對圖像傳感器輸出的曼徹斯特編碼數據進行解碼,需要對數據電平脈寬進行持續測量,并與編碼時鐘周期進行比較。L_BIT 表示原始數據電平值發生變化,S_BIT 表示原始數據電平值未發生變化。NanEyeM 圖像傳感器在每次數據傳輸前都會進入時長為648 PP 的配置模式,此時傳感器的數據線維持低電平狀態,即信號的初始電平已知,對數據的跳變沿進行跟隨同時判斷電平脈寬即可還原原始數據。
通過上述分析可知,對數據進行正確解碼的前提是對原始編碼時鐘周期進行正確測量。在同步模式下和延遲模式下,NanEyeM 圖像傳感器會持續輸出同步字,其格式如圖5 所示。

圖5 同步字格式
由曼徹斯特編碼特點可知,數據“0”被編碼為下降沿“10”,因此同步字在經曼徹斯特編碼后波形與編碼時鐘保持一致,如圖6 所示。此時的數據可認為是數據編碼時鐘,測量同步字的周期即可以得到數據編碼時鐘的周期。

圖6 同步字編碼后波形
在一般的低速異步串行通信中,由于其速度較低,采樣容差區間大,可由接收端按通信波特率生成采樣信號對數據進行采樣還原[9]。然而NanEyeM圖像傳感器的數據輸出速率高達幾MHz 至幾十MHz,若直接由接收端生成采樣信號,則對系統運行頻率要求較高,實現難度大。另外雖然可以從曼徹斯特數據流中恢復出時鐘信息,但由于傳感器內部存在的時鐘抖動、線路傳輸時延、數據耦合干擾以及系統運行頻率受限等問題,由接收端恢復出的原始時鐘始終與傳感器內部的時鐘存在周期誤差及相位誤差,且誤差會隨時間累積。誤差的存在將導致數據解碼錯誤,所以由接收端恢復的時鐘不能用做數據采樣信號。
如圖7 所示,曼徹斯特編碼后數據總是在原始數據的中間時刻發生電平跳變。而在串行通信中,為了確保采樣電平數據的正確性、可靠性,往往在數據位時間的中間時刻對信號進行采樣。因此,編碼數據的跳變沿可作為解碼數據的采樣信號。另外,由曼徹斯特編碼特點可知,電平“1”被編碼成下降沿,電平“0”被編碼成上升沿,則當解碼數據為電平“1”時,使用編碼數據下降沿采樣,當解碼數據為電平“0”時,使用編碼數據上升沿采樣。

圖7 數據采樣信號提取
NanEyeM 在黑白圖像傳感器的基礎上增加了色彩濾波陣列(CFA),從而使傳感器可以輸出Bayer格式的彩色圖像[10]。該傳感器內部使用的色彩濾波陣列如圖8 所示,左下角為第一個輸出像素。

圖8 傳感器內部色彩濾波陣列
Bayer 格式圖像特點為每個像素點只含有RGB顏色空間中的一種分量,需要使用插值算法對像素點插值處理,補全缺失的另外兩種顏色分量,將Bayer 格式轉換為RGB 格式[11]。
對Bayer 格式圖像數據進行分析,可以發現,在對像素進行插值處理時,共有四種可能的情況,如圖9 所示[12]。

圖9 插值時四種情況
基于硬件可行性考慮,在設計中采用線性插值方式完成圖像格式轉換[13]。在圖9 的每一種情況中,4 個像素點構成一個2×2 像素矩陣,以矩陣左下角第一個像素為零點,向右、向上像素坐標遞增,則有Bayer 轉RGB 公式:

式中:R、G、B 分別表示RGB 顏色空間中的三種顏色分量。
NanEyeM 圖像傳感器圖像解碼算法使用Verilog硬件描述語言實現,采用自頂向下的設計方法[14]。算法由SerialSync(串行同步模塊)、ClkExtract(時鐘提取模塊)、SensorDataDecoder(傳感器數據解碼模塊)、Bayer2RGB(Bayer 轉RGB 模塊)共4 個模塊組成。每個模塊實現算法的特定功能,算法整體框架如圖10 所示。

圖10 算法整體框圖
由于NanEyeM 圖像傳感器與FPGA 是兩個完全獨立的設備,其各自內部工作時鐘在頻率、相位上都是異步的。當異步信號直接輸入FPGA 內部寄存器時,極大可能引起寄存器亞穩態問題,導致數據錯誤[15]。因此,使用數據同步模塊將傳感器輸入的異步信號進行同步處理,最大限度降低寄存器出現亞穩態的可能性,保證數據的可靠性。同步模塊采用雙鎖存器法實現,硬件原理如圖11 所示。兩個級聯鎖存器對輸入信號連續鎖存兩次,研究表明該設計可以將亞穩態出現的機率降低到一個極小的程度[16]。

圖11 雙鎖存器同步原理圖
編碼時鐘周期信息提取模塊主要為移位寄存器、邊沿檢測模塊及周期計數器組成。在配置模式下,傳感器保持低電平輸出,完成對傳感器的配置并退出配置模式后,同步模式開始。在檢測到第一個同步字的上升沿后,周期計數器在本地時鐘信號的控制下開始計數,記為Tperiod_cnt,同時另一計數器開始統計數據的上升沿個數,記為Tpdg_cnt。當Tpdg_cnt=1 024,即統計了1 024 個編碼時鐘周期后,計數器停止計數,取周期計數器的平均值Tperiod_cnt/1 024 作為編碼時鐘周期,設計中使用取計數器值高位(Tperiod_cnt[23:11])的方式完成該計算。
數據的解碼首先需要對傳感器輸出的曼徹斯特編碼的數據流進行還原,之后在采樣信號的驅動下將串行數據轉為并行數據。解碼時使用有限狀態機對碼流跳變沿進行跟隨,狀態機狀態定義及轉換條件如圖12 所示。系統初始狀態為CLK_LOCK 狀態,當時鐘提取模塊完成對時鐘信息的提取后,跳轉到IDLE 狀態。檢測到數據的上升沿后,跳轉到JUDGE_HIGH 狀態,對數據的高電平脈寬進行判斷,解碼出原始數據。若此時檢測到數據下降沿,則跳轉到JUDGE_LOW 狀態,對輸入數據的低電平時長進行判斷,解碼出原始數據。同時若連續10 次采樣輸入數據都為低電平,則可以判斷本次數據幀傳輸完成,重新回到CLK_LOCK 狀態。

圖12 解碼狀態機
另外,為了解決傳感器內部存在的時鐘抖動、數據傳輸時延、信號耦合干擾等問題所帶來的數據脈寬變化問題,設計引入了動態脈寬調節算法,每次接收數據之前都利用傳感器的同步字對解碼的脈寬閾值進行重新標定,以保證數據解碼的正確性。
串行數據轉并行數據的功能使用12 bit 的移位寄存器(RecvShiftReg)和位接收計數器(RecvBitCnt)實現。由傳感器輸出的數據格式可知,當檢測到第一個高電平時,數據傳輸開始,移位寄存器開始在數據采樣時鐘(SampleClk)的驅動下對解碼后的數據進行移位采樣,同時位接收計數器(RecvBitCnt)開始統計接收到的數據位數。
如圖13 所示,當移位寄存器的值與數據匹配模版“1XXXXXXXXXX0”匹配,且位接收計數器的位為12 時,提取出中間的10 位有效數據,同時數據有效信號(RawDataValid)置高一個時鐘周期,清零位接收計數器,為接收下一個數據作準備。若移位寄存器中的值全為0,說明一行圖像數據傳輸完成,復位所有寄存器,保證下一次的數據能被正確接收。

圖13 數據提取原理
本設計中使用行列計數器PixelX、PixelY 分別對接收圖像數據的行像素及列像素進行計數。NanEyeM 圖像傳感器的有效像素大小為320×320 pixel,因此,行計數器PixelX 在每320 個像素后清零,同時列計數器PixelY 加一。
如圖14 所示,使用兩個長度為320 pixel、位寬為10B 的線性移位寄存器緩存兩行圖像數據,實現線性插值算法。線性移位寄存器在數據有效信號(Raw-DataValid)的驅動下從尾部移入新數據,從頭部移出舊數據。另外使用兩個獨立寄存器D00、D10 分別存儲從兩個線性移位寄存器移出的像素值,與兩個線性移位寄存器的頭部值D01、D11 組成2×2 大小的像素矩陣。最后由{PixelX[0],PixelY[0]}的值對比圖9即確定當前狀態,再依據Bayer 轉RGB 公式完成圖像格式轉換功能。

圖14 移位寄存器連接方式
在進行圖像格式轉換的同時,該模塊也通過行列計數器PixelX、PixelY 的值在正確的時刻輸出圖像行同步和場同步信號,用于后續圖像輸出顯示。
本算法使用Verilog 語言編寫,并基于Xilix 公司的Spartan-6 系列FPGA 平臺上實現,使用ISE14.7 內部自帶的仿真軟件ISim 進行算法的時序仿真,結果如圖15、圖16 所示。

圖15 數據解碼模塊仿真圖

圖16 Bayer 轉RGB 模塊仿真圖
由仿真圖可以看出,數據解碼模塊和Bayer 轉RGB 模塊都能正確連續地輸出結果,且各模塊輸出值與理論值相符,達到了本文設計目標。
使用圖像傳感器對不同物體進行拍攝,經過算法解碼后的圖像為標準的RGB 視頻流,可直接使用驅動模塊將圖像輸出到顯示器上顯示,并使用截屏軟件進行截屏。圖17(a)為NanEeyM 圖像傳感器實物,圖17(b)為手部皮膚紋理,圖17(c)為拍攝訂書針包裝盒。從截取的圖像中可以看出,該算法能正確地接收并解碼傳感器圖像數據,且解碼轉換后的圖像紋理清晰,色彩還原度較高,也能正確流暢地輸出RGB 圖像。

圖17 NanEyeM 圖像傳感器外形圖及其拍攝的圖像
本文提出了一種NanEyeM 微型圖像傳感器的數據解碼轉換算法,并基于Xilinx 公司的Spartan-6系列FPGA 在硬件上實現了該算法。測試結果證明,當傳感器工作在高速模式下,以24 frame/s 的幀速率輸出圖像數據時,算法能夠正確、連續地對數據進行解碼并輸出RGB 圖像。結果表明,本算法很好地解決了NanEyeM 微型圖像傳感器高速異步串行數據的解碼難問題及無內置ISP 導致的無法直接輸出RGB 圖像問題,為后續開發基于該圖像傳感器的應用奠定了重要基礎。