袁漢欽
(海軍駐合肥地區(qū)軍事代表室,安徽 合肥 230088)
隨著現(xiàn)代軍事技術(shù)的發(fā)展,要求航空光電探測系統(tǒng)獲取的圖像分辨率越來越高。目前,國內(nèi)最大面陣的CCD分辨率已達(dá)到一億像素。大面陣的CCD為提高拍攝幀頻通常采用多通道輸出的方式,因此需要在后續(xù)處理電路中將這些分通道輸出的圖像,完整地拼接成一幅圖像。如此巨大的數(shù)據(jù)量對(duì)數(shù)字圖像處理系統(tǒng)以及數(shù)據(jù)存儲(chǔ)系統(tǒng)來說都是一個(gè)巨大的挑戰(zhàn)。在光電探測系統(tǒng)設(shè)計(jì)、調(diào)試過程中以及在執(zhí)行任務(wù)時(shí),必須對(duì)光電探測系統(tǒng)輸出的圖像進(jìn)行實(shí)時(shí)觀測,以便判斷系統(tǒng)的工作狀況以及觀察拍攝到的景物圖像[1-3]。目前的大部分光電探測系統(tǒng)的圖像采集卡對(duì)如此巨幅的圖像都無法完全采集。對(duì)于超高分辨率的圖像采集與預(yù)處理,目前工程上僅能夠通過使用高性能的服務(wù)器配合專用采集卡才能實(shí)現(xiàn)[4-6]。這給特大面陣的圖像實(shí)時(shí)觀測帶來困難,而且整個(gè)系統(tǒng)體積較為龐大、攜帶極為不便,不能滿足航空軍事技術(shù)發(fā)展需求,因此迫切需要設(shè)計(jì)一種便攜式且能直接顯示超高分辨率光電探測獲取圖像實(shí)時(shí)顯示系統(tǒng)。本文以實(shí)際工程需求為牽引,設(shè)計(jì)了一種滿足超高分辨率光電探測系統(tǒng)的圖像采集、顯示預(yù)處理系統(tǒng)。該系統(tǒng)只需配備一個(gè)標(biāo)準(zhǔn)接口的顯示器即可完成對(duì)超高分辨率圖像的采集和實(shí)時(shí)觀測,且系統(tǒng)安裝調(diào)試簡單,適合當(dāng)前航空軍事技術(shù)對(duì)超高分辨光電探測系統(tǒng)的圖像預(yù)處理需求。
本文所設(shè)計(jì)的超高分辨率光電探測圖像預(yù)處理系統(tǒng)接口電路由CameraLink與FPGA的接口電路、DDR2存儲(chǔ)器與FPGA的接口電路、SDRAM與FPGA的接口電路、DVI和VGA與FPGA接口電路以及串口與FPGA接口電路組成。CameraLink與FPGA接口電路在設(shè)計(jì)過程中將超高分辨率光電傳感器獲取的不同路信號(hào)通過3個(gè)Base配置的CameraLink接口從傳感器輸入到顯示系統(tǒng),并通過串并轉(zhuǎn)換芯片DS90CR288將串行數(shù)據(jù)重新組合成多路并行數(shù)據(jù)送往FPGA。同時(shí),經(jīng)過預(yù)處理后的圖像經(jīng)過1個(gè)CameraLink Base頭分2路輸出到下一級(jí)系統(tǒng)。DDR2存儲(chǔ)器與FPGA的接口電路采用兩片大容量的DDR2作為高速數(shù)據(jù)緩存器,通過將5路圖像依次緩存到DDR2完成圖像的拼接。選用的DDR2存儲(chǔ)器容量為128 M×16 bit,足夠存儲(chǔ)一幅完整的圖像。在SDRAM與FPGA的接口電路中,SDRAM存儲(chǔ)器主要用于顯示圖像,圖像數(shù)據(jù)在FPGA中經(jīng)過拼接、Bin操作后需緩存到SDRAM。由于相機(jī)輸出的是位深度為12 bits的圖像,因此選用兩片容量為4 Bank×2M×16 bits的大容量HY57V281620 SDRAM來緩存BIN操作后的圖像。DVI和VGA與FPGA接口電路作為顯示電路,在顯示過程中,F(xiàn)PGA中的邏輯配合VGA和DVI的時(shí)序?qū)?shù)據(jù)從SDRAM中讀出,經(jīng)過顯示芯片編碼以后生成顯示器能辨認(rèn)的數(shù)據(jù)格式進(jìn)行顯示。串口與FPGA接口電路主要用于上位機(jī)與FPGA之間的信息交換,如通過設(shè)置FPGA內(nèi)部邏輯的工作方式,設(shè)置圖像顯示窗口的起始坐標(biāo),BIN模式的BIN倍率,以及數(shù)字增益倍率等。
系統(tǒng)接口電路設(shè)計(jì)原理圖如圖1所示。其中,F(xiàn)PGA是主要的邏輯器件,系統(tǒng)的主要邏輯功能都是在FPGA中完成的。為方便控制和協(xié)調(diào)FPGA中的各個(gè)模塊,在FPGA中設(shè)計(jì)了一個(gè)MicroBlaze處理器,完成串口通信和FPGA內(nèi)部寄存器參數(shù)設(shè)置等功能[7-10]。
圖1 系統(tǒng)硬件電路設(shè)計(jì)原理框圖
根據(jù)系統(tǒng)硬件電路設(shè)計(jì)原理框圖可知,本文所設(shè)計(jì)的超高分辨率光電探測圖像預(yù)處理系統(tǒng)是以FPGA為核心管理器件的硬件電路。在FPGA內(nèi)部共設(shè)計(jì)了五個(gè)功能模塊。分別為數(shù)據(jù)時(shí)鐘域變換模塊,數(shù)據(jù)拼接緩沖模塊,MicroBlaze處理器模塊,圖像分辨率變換及顯示模塊以及圖像平均灰度值計(jì)算模塊。系統(tǒng)功能模塊設(shè)計(jì)框圖如圖2所示。其中MB處理器核、數(shù)據(jù)拼接緩沖模塊以及分辨率變換顯示模塊是系統(tǒng)的核心模塊,也是內(nèi)部功能模塊設(shè)計(jì)的重點(diǎn)。
圖2 系統(tǒng)功能模塊設(shè)計(jì)框圖
時(shí)鐘域變換模塊設(shè)計(jì)是為了保證系統(tǒng)設(shè)計(jì)的穩(wěn)定可靠而需要進(jìn)行時(shí)鐘域變換,主要功能是將從外部與數(shù)據(jù)一起輸入的時(shí)鐘域變換到FPGA內(nèi)部時(shí)鐘域,從而可以有效解決由于傳輸過程中導(dǎo)致的時(shí)鐘信號(hào)質(zhì)量差而使數(shù)據(jù)不穩(wěn)定的問題。本系統(tǒng)時(shí)鐘域變換采用FIFO方式實(shí)現(xiàn),具體實(shí)現(xiàn)方式如圖3所示。
圖3 時(shí)鐘域變換示意圖
在FPGA內(nèi)部由于需要的時(shí)鐘種類較多。具體包括數(shù)據(jù)處理時(shí)鐘及DDR2控制器專用時(shí)鐘兩大部分。時(shí)鐘樹采用PLL(延遲鎖相環(huán))來產(chǎn)生,該IP可由1個(gè)時(shí)鐘產(chǎn)生多個(gè)輸出時(shí)鐘。DDR2控制器需要一組特殊的時(shí)鐘,這組時(shí)鐘的相位關(guān)系以及頻率都有嚴(yán)格的要求,采用DCM模塊來產(chǎn)生,時(shí)鐘樹設(shè)計(jì)產(chǎn)生框圖如圖4所示。
圖4 時(shí)鐘樹設(shè)計(jì)產(chǎn)生框圖
由于圖像數(shù)據(jù)不能直接寫入DDR2存儲(chǔ)器,而是需要通過DDR2控制器接口來完成將數(shù)據(jù)寫入DDR2的要求。因此,必須首先完成DDR2控制器的設(shè)計(jì)。通過DDR2控制器可將光電探測設(shè)備獲取的多路圖像數(shù)據(jù)依次寫入DDR2,從而拼接成一幅完整的圖像。目前,較高版本的Xilinx FPGA開發(fā)軟件ISE中都嵌入了成熟的DDR2控制器IP核,使用MIG(Memory Imterface Generator)工具即可根據(jù)實(shí)際需要完成對(duì)DDR2控制器的配置,然后生成一個(gè)需要根據(jù)實(shí)際設(shè)計(jì)進(jìn)行修改的DDR2控制器初核。該IP核的接口信號(hào)如圖5所示,主要分為三類信號(hào)分別為系統(tǒng)時(shí)鐘和復(fù)位信號(hào)、用戶接口信號(hào)以及DDR2接口信號(hào)。
圖5 DDR2控制器接口信號(hào)
DDR2控制器內(nèi)部通過基于FIFO來完成數(shù)據(jù)讀寫操作,地址/命令FIFO接收數(shù)據(jù)存儲(chǔ)的地址和讀寫指令;數(shù)據(jù)/掩膜FIFO接收或讀取數(shù)據(jù)和相應(yīng)掩碼。同時(shí),控制器內(nèi)部也產(chǎn)生了一些內(nèi)部狀態(tài)信號(hào),如app_af_afull和app_wdf_afull兩個(gè)狀態(tài)信號(hào),分別表示了兩個(gè)FIFO的內(nèi)部數(shù)據(jù)狀態(tài),用戶必須在這兩個(gè)信號(hào)均有效的情況下進(jìn)行DDR2讀寫,否則會(huì)造成數(shù)據(jù)的丟失或漏讀。雖然MIG可生成DDR2控制器的IP核,但生成的IP需要根據(jù)實(shí)際設(shè)計(jì)中的管腳分配狀況進(jìn)行參數(shù)設(shè)置,包括在UCF文件中,根據(jù)DDR2管腳的分配狀況對(duì)需要用到的一些管腳和FPGA內(nèi)部資源進(jìn)行約束以及在對(duì)ISE工程頂層HDL文件中DR2_DQS_IO_COL和DDR2_DQS_IO_MS參數(shù)進(jìn)行修改。由系統(tǒng)生成的IP核內(nèi)部代碼則不需要進(jìn)行修改。
DDR2數(shù)據(jù)操作以時(shí)鐘的雙邊沿進(jìn)行,差分時(shí)鐘的上升沿、下降沿各進(jìn)行一個(gè)數(shù)據(jù)的讀寫操作,這兩個(gè)邊沿的數(shù)據(jù)被合并在一個(gè)兩倍于讀寫數(shù)據(jù)位寬的數(shù)據(jù)中送入數(shù)據(jù)FIFO。同時(shí),在數(shù)據(jù)寫入時(shí)必須先發(fā)送讀寫命令及數(shù)據(jù)操作地址,再發(fā)送數(shù)據(jù)。具體操作時(shí)序見圖6所示。
圖6 DDR2數(shù)據(jù)讀寫時(shí)序圖
圖像拼接策略如圖7所示,采用兩組FIFO交替進(jìn)行數(shù)據(jù)緩存,每一組FIFO由5個(gè)輸入位寬為16位,輸出位寬為32位的FIFO組成。設(shè)置兩組FIFO的主要是為防止數(shù)據(jù)操作時(shí)行與行之間嚴(yán)格對(duì)齊,否則數(shù)據(jù)寫入DDR2后就有可能造成行與行之間數(shù)據(jù)錯(cuò)位,在每讀完一行數(shù)據(jù)后都對(duì)FIFO進(jìn)行一次數(shù)據(jù)復(fù)位,清空FIFO,迎接下一行數(shù)據(jù)的到來。
由于采用較高時(shí)鐘進(jìn)行數(shù)據(jù)傳輸過程中,對(duì)系統(tǒng)邏輯架構(gòu)設(shè)計(jì)的魯棒性要求較高,因此本文所示系統(tǒng)在數(shù)據(jù)輸出時(shí)采用兩路數(shù)據(jù)12bits@50MHz輸出的方法,避免單路輸出時(shí)鐘達(dá)到100 MHz造成數(shù)據(jù)傳輸錯(cuò)誤。
圖7 數(shù)據(jù)拼接示意圖
圖像分辨率比變換實(shí)現(xiàn)如圖8所示。圖中倍率寄存器主要用于設(shè)置BIN操作的合并像素?cái)?shù)。在實(shí)際應(yīng)用中采用1×1,2×2,4×4,8×8幾種倍率,將超高分辨率圖像的分辨率分別降為多種不同的低分辨率進(jìn)行處理。倍率寄存器是通過MB處理器來設(shè)置的。對(duì)于N×N BIN,首先將一行像素中相鄰的N個(gè)像素合并成一個(gè)像素,并將BIN后的該行圖像存入FIFO;在第二行圖像到來時(shí),讀出上一行的圖像將這兩行圖像相加,直到完成N行圖像的BIN操作。
圖8 BIN操作示意圖
由于需要實(shí)時(shí)對(duì)光電傳感器獲取的圖像進(jìn)行觀測,同時(shí)為避免圖像在外部存儲(chǔ)器中進(jìn)行緩存后變換帶來的幀延時(shí),因此只能對(duì)原始圖像信息進(jìn)行直接變換處理。由于傳感器同時(shí)輸出多路路圖像,只能對(duì)其分別進(jìn)行BIN操作,然后再進(jìn)行對(duì)BIN后的圖像進(jìn)行拼接。同時(shí),對(duì)于分辨率變換后圖像依然大于顯示器分辨率的情況,需要采用窗口選擇的方法,選擇一塊連續(xù)的區(qū)域進(jìn)行顯示。為保證顯示窗口的位置可連續(xù)設(shè)置以及顯示圖像的連續(xù)性,在將數(shù)據(jù)寫入外部存儲(chǔ)器DDR2中時(shí),將多路數(shù)據(jù)合成一路的數(shù)據(jù)送入BIN模塊進(jìn)行BIN操作,此時(shí)需要一個(gè)FIFO將32bits@150MHz的數(shù)據(jù)解成12bits@300MHz的數(shù)據(jù)格式。將多路原始數(shù)據(jù)分別進(jìn)行BIN操作后再用不同F(xiàn)IFO緩存起來,在進(jìn)入SDRAM進(jìn)行緩存之前將他們拼接起來合成一幅完整的BIN圖像。圖9是BIN圖像拼接及顯示窗口位置選擇示意圖。對(duì)傳感器輸出的5路圖像分別進(jìn)行經(jīng)過BIN模塊進(jìn)行分辨率變換后形成5路圖像,必須將這5路圖像拼接在一起才能保證在顯示時(shí)的數(shù)據(jù)是連續(xù)的。BIN后的數(shù)據(jù)拼接主要依靠6個(gè)FIFO,前5個(gè)FIFO分別將5路BIN后的數(shù)據(jù)進(jìn)行緩存,然后依次讀出存入到第6個(gè)FIFO,形成一行連續(xù)的、經(jīng)過BIN操作的圖像數(shù)據(jù),此后根據(jù)顯示窗口位置寄存器X方向參數(shù)對(duì)第6個(gè)FIFO中的數(shù)據(jù)進(jìn)行截取,存入SDRAM中,等待讀出、顯示。而對(duì)于行方向上的數(shù)據(jù)截取則采用一個(gè)計(jì)數(shù)器,根據(jù)顯示窗口位置寄存器中Y方向參數(shù)來設(shè)置該計(jì)數(shù)器的起點(diǎn),完成對(duì)圖像Y方向上的數(shù)據(jù)截取。
圖9 BIN圖像拼接及顯示窗口位置選擇
系統(tǒng)設(shè)計(jì)的圖像顯示是基于兩片SDRAM存儲(chǔ)器進(jìn)行的。經(jīng)過分辨率變換和圖像大小截取后,將圖像大小變換為1280×1024分辨率,交替存入這兩片SDRAM存儲(chǔ)器中,再配合VGA或DVI時(shí)序讀出SDRAM中的圖像數(shù)據(jù),輸出到視頻編碼芯片變換成顯示器能夠識(shí)別的圖像格式,完成圖像的顯示。整個(gè)過程最重要的是對(duì)SDRAM的讀寫操作和DVI(VGA)顯示時(shí)序的產(chǎn)生,DVI具體時(shí)序參數(shù)可見表1。為盡可能顯示較大的圖像面積,觀察較廣的圖像范圍,選用1280×1024分辨率進(jìn)行顯示。由表1可知,當(dāng)顯示圖像分辨率為1280×1024,顯示幀頻為75 Hz時(shí),因此需要的時(shí)鐘頻率高達(dá)135 MHz。
各時(shí)序參數(shù)的具體含義由圖10來表示。根據(jù)DVI顯示時(shí)序圖,只要在HRES階段向DVI數(shù)據(jù)編碼器TFP410送出有效數(shù)據(jù)即可完成數(shù)據(jù)的編碼。
系統(tǒng)對(duì)SDRAM的讀寫控制也是通過SDRAM控制器來完成[11]。SDRAM操作采用乒乓操作的方式,將圖像數(shù)據(jù)寫入第一片SDRAM的同時(shí),以75幀/秒的速率讀出另一片SDRAM中的圖像數(shù)據(jù)。
表1 常用DVI顯示時(shí)序參數(shù)表
注:HRES:水平分辨率,VRES:垂直分辨率,VF:垂直刷新率,HT:水平像素總數(shù),HFP:行同步前肩,HSW:行同步信號(hào)寬度,HBP:行同步后肩,POL:極性,HF:行頻,VT:總行數(shù),VFP:垂直同步前肩,VSW:垂直同步寬度,VBP:垂直同步后肩,PCLK:像素時(shí)鐘頻率。
圖10 DVI(VGA)時(shí)序圖
這樣既可以保證顯示效果的連續(xù)性,也能保證數(shù)據(jù)不丟幀。在進(jìn)入DVI時(shí)序HRES之前的若干個(gè)時(shí)鐘周期,先將需要顯示的圖像讀出存儲(chǔ)在FIFO中,當(dāng)HRES到來時(shí),直接從該FIFO中讀出有效數(shù)據(jù),完成數(shù)據(jù)與時(shí)序控制信號(hào)之間的無縫銜接。同時(shí),對(duì)于圖像分辨率小于1280×1024的圖像,將該圖像顯示于顯示器的中央,對(duì)圖像周圍無像素的區(qū)域進(jìn)行置零,從而只顯示有效的圖像區(qū)域。
本文以現(xiàn)代航空光電探測系統(tǒng)對(duì)超高分辨率圖像采集、處理與顯示為牽引,以機(jī)載超高分辨率圖像對(duì)實(shí)時(shí)預(yù)處理系統(tǒng)需求為導(dǎo)向,針對(duì)基于CameraLink接口CCD光電探測傳感器獲取的圖像不能直接顯示的問題,設(shè)計(jì)了一種圖像實(shí)時(shí)顯示系統(tǒng)。首先介紹了系統(tǒng)硬件電路的總體技術(shù)架構(gòu),詳細(xì)分析了基于FPGA的核心硬件電路內(nèi)部主要功能模塊的作用以及其具體實(shí)現(xiàn)方法。實(shí)際工程應(yīng)用結(jié)果表明本文所設(shè)計(jì)的光電探測圖像預(yù)處理系統(tǒng)的處理能力能夠很好地滿足機(jī)載超高分辨率光電探測設(shè)備對(duì)多分辨率,尤其是超高分辨率圖像的實(shí)時(shí)采集處理和增強(qiáng)顯示要求。此外,按照本文所設(shè)計(jì)的系統(tǒng),通過修改系統(tǒng)核心硬件內(nèi)部參數(shù),可直接應(yīng)用到其他基于CameraLink接口的不同面陣大小的CCD中,具有良好的通用性。