文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.07.009
中文引用格式: 侯絮絮,馬松齡,孫晨,等. 基于FPGA的CMOS相機實時數(shù)據(jù)處理設(shè)計[J].電子技術(shù)應(yīng)用,2017,43(7):36-39.
英文引用格式: Hou Xuxu,Ma Songling,Sun Chen,et al. Real-time data processing design of CMOS camera based on FPGA[J].Application of Electronic Technique,2017,43(7):36-39.
0 引言
工業(yè)相機常用的圖像傳感器有CMOS及CCD[1-2]兩種,CMOS圖像傳感器因其驅(qū)動靈活、編程簡單、功耗低、成本低等優(yōu)勢已廣泛應(yīng)用到各種圖像采集系統(tǒng)中[3-5]。由于高速傳輸中采集的圖像數(shù)據(jù)量較大,易產(chǎn)生誤碼,若不及時校正,將嚴重影響圖像質(zhì)量,阻礙CMOS相機的普及應(yīng)用。
本次相機系統(tǒng)開發(fā)采用CMV2000圖像傳感器,理論圖像分辨率可達到2 048×1 088[6]。但開發(fā)過程中發(fā)現(xiàn),誤碼問題未得到很好地解決,致使成像模糊,圖像最高分辨率僅為1 088×768,遠不能滿足高分辨率的技術(shù)要求。
1 圖像傳輸過程中存在的問題
相機控制系統(tǒng)功能框圖如圖1所示。系統(tǒng)采用FPGA[7-9],外部晶振向FPGA輸入時鐘信號,均為固定頻率,再轉(zhuǎn)換成驅(qū)動CMV2000圖像傳感器、采集像素數(shù)據(jù)及格式編排的時鐘,同時為各單元提供異步復(fù)位信號;RS422作為系統(tǒng)通訊協(xié)議,將收到的串行數(shù)據(jù)轉(zhuǎn)換為并行信號發(fā)送給CMV2000的驅(qū)動單元[10];FPGA通過SPI接口對CMV2000進行自動曝光、采樣模式、復(fù)位等工作參數(shù)配置。
由于傳輸?shù)臄?shù)據(jù)是經(jīng)壓縮算法去除了圖像中大部分內(nèi)在相關(guān)性的已編碼數(shù)據(jù),即使相對輕微的誤碼,對解碼圖像數(shù)據(jù)也會有嚴重的影響。編碼圖像序列的一幀之內(nèi),若一個碼字出錯,將會對后面整個編碼序列解碼錯誤,導(dǎo)致誤碼擴散。
CMV2000圖像傳感器輸出的16通道數(shù)據(jù)及1通道輸出時鐘的相對位置并未完全對齊,若用時鐘直接采樣會出現(xiàn)誤碼現(xiàn)象,致使數(shù)據(jù)傳輸錯誤?;贑MV2000的相機是高速高分辨率相機,傳輸?shù)臄?shù)據(jù)速率高達480 Mb/s,傳輸過程中若數(shù)據(jù)校正問題沒有得到解決必會引起誤碼概率增加。從相機開發(fā)過程中發(fā)現(xiàn),誤碼對實時傳輸?shù)膱D像分辨率影響最大。圖2(a)是數(shù)據(jù)傳輸錯誤圖例,圖2(b)是截取其局部圖像進行3:1放大,圖中出現(xiàn)許多白色的小雪花狀斑點,而且各個樓層的棱角模糊不清,其中某樓層的右下角處圖像不完整,如箭頭所示。圖像分辨率僅為:1 088×768。
因此,對16通道數(shù)據(jù)進行位和字的校正調(diào)整,將亂序數(shù)據(jù)及時校正是降低誤碼率、提高圖像分辨率的基本保障,也是數(shù)據(jù)處理的核心內(nèi)容。
2 數(shù)據(jù)處理單元設(shè)計
數(shù)據(jù)處理單元是驅(qū)動控制系統(tǒng)的核心部分,在FPGA內(nèi)部完成,主要實現(xiàn)LVDS圖像數(shù)據(jù)的串并轉(zhuǎn)換、亂序數(shù)據(jù)之間的順序調(diào)整、高速數(shù)據(jù)的乒乓緩存及Camera Link傳輸協(xié)議進行格式編碼后發(fā)送4項功能。整個數(shù)據(jù)處理過程實現(xiàn)了圖像數(shù)據(jù)的實時傳輸。
2.1 串并轉(zhuǎn)換
數(shù)據(jù)在進行串并轉(zhuǎn)換時,經(jīng)時鐘倍頻后,在其下降沿開始采集數(shù)據(jù)。圖像數(shù)據(jù)及同步數(shù)據(jù)存儲時選用17個10位移位寄存器。當同步數(shù)據(jù)有效時,若16路并行圖像數(shù)據(jù)也有效,則對其進行存儲。圖3是CMV2000一行數(shù)據(jù)的輸出格式。每5個數(shù)據(jù)時鐘周期中,F(xiàn)PGA接收的16路10 bit數(shù)據(jù)并非順序輸出,務(wù)必加大數(shù)據(jù)排序和存儲的難度。每10個時鐘周期內(nèi),F(xiàn)PGA接收到32路10 bit數(shù)據(jù)是連續(xù)的,可將連續(xù)的8個數(shù)據(jù)合并為1個數(shù)據(jù)后再進行數(shù)據(jù)存儲。因此,僅需4個時鐘周期就可以儲存32個數(shù)據(jù)。由于數(shù)據(jù)傳輸芯片TLK2711需要接收16 bit的并行數(shù)據(jù),所以FPGA在存儲數(shù)據(jù)前將每個數(shù)據(jù)高6位補0,并將8個16 bit數(shù)據(jù)合并成一個128 bit數(shù)據(jù)進行存儲。若不補0或少補0,則會導(dǎo)致大量數(shù)據(jù)相繼錯位,數(shù)據(jù)傳輸錯誤,嚴重影響輸出圖像質(zhì)量。
2.2 位對齊和字對齊
常用的方法是使用有限狀態(tài)機對數(shù)據(jù)位、字進行校正設(shè)計,但該方法代碼冗長,過程中會產(chǎn)生大量剩余狀態(tài)。若不及時處理,狀態(tài)機可能進入不可預(yù)測的狀態(tài),會出現(xiàn)短暫失控;若對其進行處理又會耗用更多的邏輯資源;此外,在對時序進行仿真時,時鐘有效邊沿的輸出端會產(chǎn)生許多毛刺;若加一個寄存器在輸出端,雖可消除毛刺保證輸出信號的穩(wěn)定性,但輸出會延遲一個周期,可能導(dǎo)致誤碼概率增加。
從節(jié)省邏輯資源、減少毛刺、降低誤碼率方面考慮,本次設(shè)計舍棄狀態(tài)機,利用FPGA自身性能,采用VHDL硬件語言對每條通道中的亂序數(shù)據(jù)進行位、字校正調(diào)整編程設(shè)計。
數(shù)據(jù)校正流程如圖4所示,在training模式下,經(jīng)異步復(fù)位rstin后,數(shù)據(jù)全部清零(BitCunt<=0),進入眼圖采樣狀態(tài),要實現(xiàn)采樣時鐘恰好在眼圖的中心位置,需通過FPGA的選型,對數(shù)據(jù)傳輸通道進行延時控制;然后將輸出的并行10位數(shù)據(jù)與上次接收數(shù)據(jù)進行比較,若數(shù)據(jù)發(fā)生變化,則表明采樣點不在眼圖的中央位置,記錄此時的延遲拍數(shù),找到延遲邊緣的中間點即為最佳采樣位置,將采樣點移到眼圖中間即完成位對齊。位對齊完成后,進入圖像字對齊(Align_Image Bit),為確保每個通道在同一時鐘沿上采集到第一個字節(jié),在傳感器training模式下,發(fā)送相應(yīng)的訓練字節(jié),接收模塊解串后,通過旋轉(zhuǎn)解串后的字節(jié),讓其與訓練字節(jié)匹配,若采集到的10 bit字節(jié)與所期望的字節(jié)不匹配,則返回到Make_CtrlAlign操作,使控制進程重新對齊,如此反復(fù),直到并行數(shù)據(jù)與訓練字匹配為止,從而實現(xiàn)字對齊。
2.3 乒乓緩存
該模塊的設(shè)計是為獲得傳感器最快的輸出模式,將CMV2000的輸出模式配置成16通道,但Camera Link接口標準在Base配置模式下僅有8通道,因此將兩路圖像數(shù)據(jù)轉(zhuǎn)換成一路圖像數(shù)據(jù)。實現(xiàn)與Camera Link協(xié)議Base模式下8個PORT映射對接[11]。因此,本次設(shè)計利用XC6SLX150內(nèi)部IP核創(chuàng)建2個容量為256×128 bit的雙口RAM進行乒乓緩存;然后將讀出的圖像數(shù)據(jù)寬度設(shè)定為16 bit,讀出時鐘采用較高頻率。這種在雙RAM中同時進行寫入和讀取操作的方法提高了數(shù)據(jù)之間的存儲速度。
2.4 格式編碼
Camera Link協(xié)議中,其接口芯片同時接收28 bit TTL/CMOS信號:24 bit數(shù)據(jù)信號、4 bit幀有效FVAL信號及行有效LVAL信號。FPGA僅接收數(shù)據(jù)信號,因此,異步FIFO(First In First Out)要在控制圖像數(shù)據(jù)時序的同時,生成FVAL和LVAL兩個同步控制信號。當前較常用的FIFO器件很難滿足系統(tǒng)要求,本次采用VHDL硬件語言設(shè)計了一種既提供數(shù)據(jù)緩存,又匹配Camera Link接口標準的異步FIFO。整個系統(tǒng)使用3個FIFO,分別用于幀號、行號及圖像數(shù)據(jù)的儲存。在發(fā)送的每行圖像數(shù)據(jù)前加8 bit輔助數(shù)據(jù)后,按照規(guī)定的列數(shù)和行數(shù)有序地選擇FIFO并讀取數(shù)據(jù)。此外,在每行、每幀之間的空閑狀態(tài),向TLK2711發(fā)送一個16 bit空閑碼,保證TLK2711發(fā)送端串行數(shù)據(jù)的同步。
3 試驗結(jié)果
根據(jù)以上軟件設(shè)計,結(jié)合硬件設(shè)計,采用ISE14.3軟件中自帶的在線邏輯分析儀ChipScope,對本次設(shè)計進行板級圖像數(shù)據(jù)和時序抓拍分析,圖5為讀取一行的像素數(shù)據(jù),依次讀取0~7通道,ch_id為相應(yīng)通道號。圖6為通道6采樣的具體數(shù)據(jù)讀取,addr為相應(yīng)的地址,其中高低位像素做了重置。由ChipScope捕捉的時序圖可以看出,該系統(tǒng)成功采集到了經(jīng)過數(shù)據(jù)處理后的圖像數(shù)據(jù)。
為了驗證本次設(shè)計數(shù)據(jù)處理后的成像效果,采用頻率為48 MHz的主時鐘,數(shù)據(jù)傳輸速率為480 Mb/s,圖7(a)為數(shù)據(jù)校正后的圖片,選取相同圖像部分進行3:1放大后對比發(fā)現(xiàn),圖7(b)中每幢樓層的棱角清晰,顏色分明,除此之外,樓層右下角可以清楚地看到幾顆大樹的樹頂。整體圖像無斑點、無錯誤區(qū)域,圖像質(zhì)量明顯提高,分辨率達到2 048×1 088。
4 結(jié)論
通過深入分析圖像數(shù)據(jù)傳輸過程中影響成像質(zhì)量的原因,采用VHDL硬件語言,設(shè)計基于FPGA的數(shù)據(jù)處理程序,既充分利用FPGA內(nèi)部邏輯資源,避免使用狀態(tài)機處理數(shù)據(jù)校正時過度占用FPGA資源、產(chǎn)生大量毛刺和剩余狀態(tài)問題,又能很好地解決誤碼問題。實驗證明經(jīng)過本數(shù)據(jù)處理環(huán)節(jié)后,數(shù)據(jù)傳輸中誤碼率降至5%,解決了高速傳輸過程中的數(shù)據(jù)校正問題,使最終顯示到計算機上的圖像質(zhì)量高、無錯誤區(qū)域,分辨率達到2 048×1 088,滿足預(yù)期的技術(shù)要求。
參考文獻
[1] 孫波,王曉艷.CCD圖像傳感器和CMOS圖像傳感器的比較研究[J].信息通信,2015,156(12):35-36.
[2] 雷蕾.基于CCD與CMOS圖像傳感新技術(shù)的研究[J].科技創(chuàng)新導(dǎo)報,2014(14).
[3] 王晗,李翔,李忠敏,等.基于OV7670的圖像采集與顯示設(shè)計[J].中國科技信息,2013(11):90-91.
[4] 丁昊杰,劉敬彪,盛慶華.基于CMOS圖像傳感器的視頻采集系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(14):178-181.
[5] 魏麗玲,朱平,石永亮.基于FPGA的圖像采集與存儲系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用.2015,41(11):67-69.
[6] CMOSIS.200 Megapixel Global shutter CMOS image sensor datasheet[J/0L].www.Cmosis.com/producta/product.detail/cmv2000,2013:1-44.
[7] 王征,何云豐,曹小濤,等.基于FPGA的大面陣CMOS相機高速率電子學系統(tǒng)設(shè)計[J].液晶與顯示,2016,31(2):174-178.
[8] 李方寧,王延杰,張濤,等.基于AM41V4傳感器的高清高速CMOS相機系統(tǒng)設(shè)計[J].液晶與顯示,2015,30(3):492-498.
[9] 任偉,張彥軍,白先民.基于LVDS的高速數(shù)據(jù)傳輸裝置的設(shè)計[J].科學技術(shù)與工程,2012,12(29):7759-7763.
[10] 索義芳,高飛,孫磊.基于FPGA的差分RS422串行收發(fā)模塊的設(shè)計實現(xiàn)[J].微計算機信息,2010,26(12):125-126.
[11] 王小艷,張會新,孫永生,等.Camera link協(xié)議和FPGA的數(shù)字信號源設(shè)計[J].國外電子元件,2008,16(7):59-61.
作者信息:
侯絮絮1,馬松齡1,孫 晨2,郭子靖1
(1.西安建筑科技大學 機電工程學院,陜西 西安710055;2.中國科學院 西安光學精密機械研究所,陜西 西安710119)