文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.06.002
中文引用格式: 馬林,李錦明,張虎威,等. 高速CMOS圖像存儲與實時顯示系統設計[J].電子技術應用,2017,43(6):7-10,14.
英文引用格式: Ma Lin,Li Jinming,Zhang Huwei,et al. Design of high-speed CMOS image storage and real-time display system[J].Application of Electronic Technique,2017,43(6):7-10,14.
0 引言
在航空航天圖像監測領域,高分辨率、高幀頻的工業相機有著廣泛的應用,它可以有效捕捉高速飛行器的飛行姿態,最終通過計算機對圖像進行分析與處理,提取出其運行速度、加速度等重要參數[1]。隨著工業相機分辨率以及幀頻的不斷提高,對圖像存儲系統的要求也越來越高,特別是在載人航天測試領域,存儲系統必須能夠應對復雜的工況環境。傳統的Nand Flash以及機械硬盤等存儲介質存在容量小、操作復雜以及抗干擾能力差等缺點,而SSD固態硬盤憑借其容量大、速度快、環境特性好等特點,在科研、航空航天以及軍事測試等領域,有廣闊的應用前景。
現階段,主要使用傳統的Flash對圖像數據進行采集。文獻[2]和[3]采用Flash陣列進行數據的存儲,雖然在一定程度上提高了讀寫速度,但是存在接口操作復雜、穩定性差等缺點。文獻[4]使用圖像采集卡進行圖像數據的實時顯示,增加了系統的體積與復雜度,而且圖像的分辨率不高。本文通過采用FPGA對系統功能進行開發,利用4塊SSD固態硬盤構成存儲陣列對高速圖像進行存儲,可以在飛行器回收后讀取原始圖像數據,同時以抽幀并降低分辨率的形式對圖像數據進行實時顯示,以減小遙測數據回傳時的帶寬占用,實現了圖像數據的大容量高速存儲與實時顯示,并且具有可移植性。
1 系統總體設計
系統設計總體框圖如圖1所示。系統選用Point Grey公司生產的GZL-CL-41C6型號高速灰度相機,通過Camera Link接口發送圖像數據和同步信號,串口接收相機控制命令,圖像分辨率為2 048×2 048像素,幀頻為150 f/s,像素格式為8 bit[5]。由于相機產生的數據量約為600 MB/s,而SATA2.0接口的單塊固態硬盤的寫入速度約為180 MB/s[6],所以使用4塊固態硬盤構成RAID0陣列進行存儲。系統采集工業相機輸出的高速圖像數據,并將數據發送到FPGA后分成兩路,一路經過DDR3緩存后,并行存入固態硬盤整列中;另一路經過格式轉換后存入DDR3緩存中,然后通過VGA接口實時顯示圖像數據。
2 系統硬件電路設計
2.1 圖像采集模塊
系統前端工業相機使用了8-tap模式輸出像素數據,即一次輸出8個像素數據,所以使用Full模式Camera Link接口電路。在Full模式下,Camera Link接口使用兩個連接器,需要使用3個數據接口芯片、一個相機控制芯片和一個串行通信芯片。通過接口芯片將Camera Link電纜所傳輸的LVDS差分信號轉換為FPGA可以直接進行處理的TTL電平信號。
相機與FPGA連接示意圖如圖2所示。系統選用TI公司生產的DS90CR288A作為數據接收芯片,DS90LV-047ATM為控制芯片,DS90LV019TM為串行通信芯片。其中,D0~D23為數據信號,FVAL、LVAL、DVAL為同步信號,CC1~CC4為相機控制信號,SerTC與SerTFG為串行通信信號。
2.2 VGA驅動電路
FPGA的輸出為3.3 V的電平信號,而VGA接口要求的輸入信號為0~0.714 V的模擬信號,所以為了滿足VGA顯示要求,必須對FPGA的輸出信號進行D/A轉換,以實現0~0.714 V的模擬信號輸入[7]。系統選用ADI公司生產的視頻轉換芯片ADV7123實現VGA驅動,由于相機輸出的圖像數據為灰度圖像,所以將R、G、B三個通道中的任意一個與FPGA相連,并且將其他兩路接地。本設計將FPGA輸出與紅色輸入端口相連,并將未使用的綠色和藍色模擬信號連接37.5 Ω終端電阻。
2.3 千兆以太網接口電路
系統使用了Realtek公司生產的以太網收發器RTL8211EG實現千兆以太網數據傳輸。鏈路層、傳輸層以及網絡層使用UDP/IP協議,由FPGA實現。RTL8211EG與FPGA的電路連接示意圖如圖3所示,RTL8211EG通過GMII接口與FPGA進行連接,主要用來連接以太網的MAC層和PHY層。當使用千兆以太網進行數據傳輸時,接口時鐘為125 MHz。其中,接收時鐘由RTL8211EG的E_RXC提供;發送時鐘由FPGA的E_GTXC提供,接收與發送數據均在時鐘上升沿進行采樣。
3 系統軟件設計與仿真
3.1 圖像實時顯示模塊
系統相機輸出的圖像分辨率為2 048×2 048像素、150 f/s幀頻的圖像,無論是分辨率還是幀頻都超過了通用VGA接口顯示器的顯示格式,所以可以采取抽幀并降低分辨率的方式對圖像進行顯示。
3.1.1 圖像壓縮單元設計
系統對原始分辨率為2 048×2 048像素的圖像進行如圖4所示的縮小,將3×3范圍內的9個像素數據合成為1個像素數據,最終得到分辨率為682×682像素格式的圖像。為了降低噪聲信號在圖像中的影響,使用了對9個像素數據取中值的方式進行合成。
在FPGA程序設計中,使用了9個FIFO對算法進行實現,實現方法如圖5所示。每個FIFO的大小為1 024×8 bit,通過9個FIFO對3行像素數據進行緩存。其中,首先用FIFO1、FIFO2、FIFO3分別存儲第一行的第1、2、3個數據,緊接著再存儲第一行的第4、5、6個數據,直到第一行存儲完畢;之后使用FIFO4、FIFO5、FIFO6以相同的方式緩存第二行數據,FIFO7、FIFO8、FIFO9緩存第三行數據。前三行數據緩存完之后,再使用另外9個FIFO存儲第4、5、6行數據,與第一組FIFO構成乒乓緩存結構。這樣,每一組FIFO可以在一個周期讀出需要處理的9個像素數據,并對這9個數據提取中值。
對于N為奇數的中值運算,若N為9,則需要比較的次數為36次,結合FPGA并行處理的優勢,同時使用36個比較器,可以達到最大處理速度[8]。此外,VGA顯示器分辨率為1 024×768像素,而經過處理后的圖像分辨率為682×682像素,所以圖像應在顯示器中央顯示,在進行VGA驅動顯示時,可以將其他像素補0,即黑色圖像。
3.1.2 抽幀緩存模塊
由于相機輸出圖像的幀頻為150 f/s,而常用VGA分辨率格式的幀頻一般都在75 Hz以下,為了匹配VGA接口分辨率,對相機圖像進行抽幀緩存處理,每兩幀抽取一幀,依次存入兩片DDR3中,最終以1 024×768@75格式的VGA分辨率進行顯示。
抽幀顯示時序圖如圖6所示。將相機幀同步信號FVAL進行4分頻,得到抽幀控制信號F_Control,再生成一個以F_Control的邊沿為復位信號的FVAL上升沿計數器CNT。當F_Control為低電平時,將CNT為1的幀圖像存入緩存1;當F_Control為高電平時,將CNT為1的幀圖像存入緩存2。讀緩存與寫緩存正好相反,在F_Control為低電平時讀取緩存2中的數據;在F_Control為高電平時讀取緩存1中的數據。
在程序設計時,對圖像分辨率、圖像縮放因子、圖像幀頻、抽幀系數等關鍵參數使用Verilog HDL語言中的`define語法進行宏定義,實現任意分辨率和幀頻的圖像格式轉換,以便相機和顯示器型號的改變以及系統移植。
3.2 圖像存儲模塊
系統以Spartan6-T系列FPGA中的GTP高速串行收發器為基礎,實現SATA2.0控制器的物理層,并使用Verilog HDL語言實現鏈路層、傳輸層以及命令層的開發,最終實現SATA2.0協議的DMA傳輸。
在進行圖像存儲時,首先將圖像采集模塊采集到的數據先通過異步FIFO進行位寬轉換,系統使用FPGA中的MCB(Memory Controller Block)硬核來控制DDR3存儲器,為了最大化帶寬,其用戶端口位寬選擇為128 bit,所以需要把Camera Link接口64 bit位寬的數據轉換為128 bit位寬數據,再把數據輸入數據分配模塊。數據分配模塊流程如圖7所示。系統使用的DDR3存儲器型號為MT41J256M16,容量為512 MB,將其分為上、下半頁,數據以256 MB為單位按照流水線方式依次存入兩片DDR3之中。
系統使用的SATA控制器的尋址方式為邏輯塊尋址,每個邏輯塊的大小為512 B。為了最大化利用存儲帶寬,使用突發讀寫模式,其中寫突發讀寫控制端口cmd_bl的位寬為18 bit,最大讀寫深度為262 144,一次可以讀寫262 144×512 B,即128 MB的數據。硬盤存儲數據分配流程圖如圖8所示,以128 MB為單位將DDR存儲器每半頁再次分塊,SATA控制器0~SATA控制器4分別按照命令讀取DDR3_0和DDR3_1中的數據,并以流水線的方式存入固態硬盤中。
4 系統測試
為了驗證系統功能的正確性,對系統存儲模塊以及顯示模塊分別進行了測試。使用三星公司的750 EVO固態硬盤進行測試,在SATA控制器數據端口插入觸發信號,當控制器讀取或寫入硬盤數據時,記錄數據流量及時間,當計滿1GB的數據后,計算讀寫速度,同時對計數器清零,之后將速度信息通過串口模塊發送到上位機。系統存儲模塊讀寫速度測試如圖9、圖10所示。
通過Camera Link串行通信芯片發送命令,將相機圖像設定為測試圖像。相機測試圖像在同一行中灰度值逐漸遞減,可以清晰地反映圖像數據的傳輸過程,并且可以根據每一個像素的相鄰數據判斷圖像傳輸是否發生錯誤。通過上位機回讀顯示的圖像與實時顯示的圖像均顯示良好,沒有發生像素缺損和錯位現象。
5 結束語
本文設計了一種高速CMOS圖像存儲與實時顯示系統,主要包括系統圖像接口模塊、VGA驅動電路以及圖像回讀模塊等硬件電路,同時對圖像顯示模塊及存儲模塊的軟件進行設計。經過讀寫速度測試以及圖像顯示測試,表明該系統可以對分辨率為2 048×2 048像素、幀頻為150 f/s的高速圖像進行存儲與實時顯示,具有較高的可移植性以及實用價值。
參考文獻
[1] 韓帥.基于工業相機的圖像采集與回放系統研究[D].太原:中北大學,2015.
[2] 張惠臻,周炎,王成.基于NAND Flash的嵌入式大規模數據存儲機制[J].華中科技大學學報(自然科學版),2017,45(1):46-51.
[3] 徐永剛,任國強,吳欽章,等.NAND Flash圖像記錄系統底層寫入控制技術[J].光電工程,2012,39(9):138-144.
[4] 馬志剛,劉文怡,凌偉.基于PCI和LVDS的高速數據存儲系統的設計[J].電子技術應用,2014,40(4):80-83.
[5] BARRERA E,RUIZ M,SANZ D,et al.Test bed for real-time image acquisition and processing systems based on F1exRI0,Camera Link and EPICS[J].Fusion Engineering and Design,2014,89(5):633-637.
[6] 劉偉.SATA接口雙硬盤控制技術研究與實現[D].太原:中北大學,2016.
[7] 吳偉學.基于FPGA的圖像采集與處理系統設計[D].廣州:華南理工大學,2015.
[8] 李飛飛,劉偉寧,王艷華.改進的中值濾波算法及其FPGA快速實現[J].計算機工程,2009,35(14):175-177.
作者信息:
馬 林1,2,李錦明1,2,張虎威1,2,侯天喜1,2,降 帥1,2
(1.中北大學 電子測試國家重點實驗室,山西 太原030051;
2.中北大學 儀器科學與動態測試教育部重點實驗室,山西 太原030051)