李 華
(商洛學院,陜西商洛726000)
近些年,隨著航天技術的發展,在航天器姿態高準確度測量、天文觀測和科學成像等領域,性能優越的面陣CCD越來越多地得到了應用[1]。而在CCD的應用技術中,CCD驅動時序的產生和信號的實時輸出是兩個最關鍵的問題,特別是隨著CCD技術的發展,頻率高、數字化的CCD新型相機不斷出現,對于圖像數據傳輸和處理的要求也越來越高[2],基于這些原因,該設計采用了數據時分復用技術,使2臺CCD相機輸出的4路圖像數據僅在1根總線上實時傳輸,同時,這根總線還能在圖像的幀逆程期間向2臺相機發送控制命令,大大節約了總線資源。考慮到圖像的讀出速率,所以,讓CCD工作在雙路輸出模式:一路是1行圖像的前半部分,順序輸出;另一路是一行圖像的后半部分,逆序輸出。因此,2路數據不能直接拼接,為了達到順序輸出1行圖像的目的,設計了LiFo(Last in First out),并結合FiFo和乒乓操作,完成了所有圖像數據實時、準確的輸出。系統的總體設計方案如圖1所示,整個設計僅使用了1片Xilinx公司的FPGA—XC2V3000,簡化了系統的結構。

圖1 CCD相機系統原理圖
CCD42-80 Back Illuminated AIMO CCD是英國e2v公司生產的一款采用背照、全幀結構的低噪聲幀轉移面陣CCD,結構如圖2所示。CCD42-80芯片正常工作需要16路驅動信號,分別是:幀轉驅動信號 IΦ1,IΦ2,IΦ3;存儲區驅動信號 SΦ1,SΦ2,SΦ3;寄存器讀出驅動信號 RΦ1L,RΦ2L,RΦ1R,RΦ2R,RΦ3;復位驅動信號ΦL,ΦR;像元合并驅動信號SWL,SWR;清除電荷用驅動信號DG[3]。應用FPGA產生這16路驅動信號,并組成具有周期性且滿足CCD手冊給定的復雜關系,即可讓CCD正常工作。但是,為了適應相機探測環境的多變性,方案不僅要讓探測器能正常工作,還要具有曝光時間可調等功能。

圖2 CCD42-80背照式AIMO探測器結構圖
針對CCD42-80的時序特點,具體設計步驟為:將1幀圖像分為4個過程,分別是積分、幀轉1、讀出、幀轉2。在積分階段,CCD感光區的感光陣列接受外界光源照射產生電荷,并同時清除上一幀周期里在讀出階段產生的轉移到幀存儲區的電荷,這部分設計是在不改變系統主頻的前提下,通過改變感光階段的轉移脈沖個數來實現的,如果要增加積分時間,只要增加轉移脈沖的個數即可;在幀轉1階段將積分階段產生的電荷完全轉移到幀存儲區;在讀出階段將幀存儲區的信號逐行轉移到輸出寄存器里并將信號全部輸出,感光區同時曝光;在幀轉2階段將讀出期間,感光區產生的信號轉移到幀存儲區,準備在下一幀周期的積分階段將其清除。因為幀轉1、讀出、幀轉2的時間是固定的,所以,只要幀頻確定,曝光時間就可以在一定范圍調整了[4-5]。
當給CCD42-80 Back Illuminated AIMO探測器提供了正確的驅動時序信號并經過AD轉換等處理后,它將輸出由200 kHz像元時鐘信號、16位并行圖像數據信號、行有效信號和幀有效信號組成的視頻信號,其中行有效信號和幀有效信號由FPGA根據時序關系產生。因此,怎樣將視頻信號以最簡單的方法實時、準確的輸出是本文研究的一個重點。
時分復用即將時間分成若干時隙,每一路輸入信號占用其中1個時隙(不同的速率數據也可以占用2個或2個以上的時隙),各路信號在同一個信道上傳輸而互相不受干擾[6]。本項目根據需要設計了A和B兩臺相機,且要同時工作,為了保證圖像的讀出速率,每臺CCD42-80相機采用的是雙路輸出圖像的方式。因此,時序上每輸出1個讀出時鐘,系統就會同時輸出4個像元,如果不采用總線復用技術,而使用并行傳輸的方式,僅傳輸圖像數據就需要16位×4=64位總線,再加上16位的相機命令控制總線,這將給只使用1片XC2V3000作為控制核心的系統在總線資源和體積重量上帶來比較大的挑戰。因此,數據時分復用技術在本項目及其他類似設計上的應用是很有必要的。在闡述該技術的具體應用前,對前端AD及其工作原理先進行簡單介紹。
在系統方案確定后,首先要根據項目要求選擇合適的AD,這是因為從CCD輸出的是模擬信號,而要對圖像進行采集和后續處理必須將這些模擬信號轉換為數字信號,這就要用到AD。在本方案中,綜合考慮系統的分辨力、通道數、采樣率、采樣范圍和接口以及采購難易程度等要求,最終選用了AD公司的16位快速ADC—AD976A。圖3所示為AD976A的工作時序,從圖3中可以看出,一個AD的轉換周期包括數據轉換和數據獲取兩部分,有效數據出現在數據獲取部分,持續時間大概有800 ns左右,這對于使用64 MHz系統時鐘的FPGA來說已經夠長了,所以數據時分復用將在這段時間內完成。具體過程為:從CCD輸出的4路模擬數據Al,Ar,Bl,Br分別送給對應的AD0,AD1,AD2,AD3進行AD轉換,當BUSY信號有效時,表示輸出數據已經就緒,可以進行采集,由于是4片AD,所以,會有4個 BUSY 信號 BUSY0,BUSY1,BUSY2,BUSY3,由于數據輸出格式是順序輸出,所以數據的輸出順序必須是A相機左路,A相機右路,B相機左路,B相機右路,即順序的從AD0~AD3進行采集。理論設計的BUSY0,BUSY1,BUSY2,BUSY3 信號是同時到來,但是實際中可能會因器件延遲或布線等原因產生一定誤差,所以首先要對BUSY0,BUSY1,BUSY2,BUSY3的到來順序進行仲裁才能開始數據的采集。如圖4所示,為了防止毛刺等無效信號的干擾產生誤判斷,從而產生誤操作,設計上對每個BUSY信號的上升沿應用仲裁機制,只有當每次轉換中最后到來的BUSY信號的上升沿被捕獲時,才依次開始產生AD0~AD3數據采集使能信號,且4個數據采集使能信號沒有重疊,而且是在AD數據有效的800 ns內,這就相當于4個AD和數據傳輸總線間裝了開關,每次只能打開1個開關放數據過去,而開關之間是獨立的。因為數據采集使用的是16 MHz的脈沖,而采集數據是發生在采集使能期間,所以,數據采集使能信號的寬度必須大于62.5 ns。這樣,當有效數據出現時,只需要控制好采集使能信號,分時將16位的圖像數據依次送到總線即完成了圖像數據的輸出。另外,在每一幀圖像的幀逆程期間,控制系統產生發送相機命令使能信號,同時,利用公共的16位總線給相機發送增益、級數等控制命令。這樣,僅需要16位總線就完成了4路16位圖像數據的輸出和16位相機控制命令的發送,大大節約了總線資源。


圖4 數據總線復用原理圖
在第3節中,得到了來自AD0~AD3的圖像數據,根據CCD42-80探測器在雙路輸出模式下,圖像的輸出格式可知,每一臺相機,比如A相機的圖像,即來自AD0和AD1的圖像數據,AD0得到的是每一行圖像的前半行,即0~1023列的像元,而AD1得到的是另外半行像元,但是,輸出順序確是2047~1024。這樣,2個半行在拼成1行圖像時,后半行就存在順序的問題,不能直接合成1行,繼而導致不能準確輸出圖像[7]。為了解決這個問題,本方案設計了基于雙口RAM的LiFo(Last in First out)。如圖5所示,采用兩片深度為1024的FiFo和兩片深度為1024的LiFo,進行乒乓操作[8]。當第1行圖像的前半行順序輸出時先存儲在FiFo A里,后半行逆序存儲在LiFoA里,當存儲完半行圖像后,系統開始讀FiFo A,獲取前半行數據,同時讀LiFo A的數據進入FiFo A,接在前半行數據的后面,等到將FiFo A里的數據讀完,第1行圖像就順序的輸出完畢了。在讀FiFo A和LiFo A時,將第2行圖像的前半行存儲在FiFo B里,后半行存儲在LiFo B里,等第1行圖像處理完畢后,對FiFo B和LiFo B進行類似的拼接操作就得到了第2行圖像.同時,將第3行圖像存儲在FiFo A和LiFo A里。這樣交替的乒乓進行,所有的圖像就順序的實時輸出了。

圖5 圖像拼接原理圖
眾所周知,Xilinx的FPGA設計比較靈活,而且還有許多現成的IP core可以應用,比如本文應用的FiFo和Single-Port Block Memory。
為了得到想要的LiFo,可以先從它的原理入手,LiFo顧名思義就是先進后出的意思,因此必須要有2個端口,且輸出數據是將輸入數據的順序逆序獲取的,再加上讀寫的速率不是很高,只有幾十兆赫茲。經分析不難發現,雙口RAM剛好滿足這一條件。因此,Xilinx提供的Single-Port Block Memory可以用來搭建1個雙口RAM。調用該IP core,時鐘采用64 MHz,得到的LiFo部分時序如圖6所示,地址采用由低向高遞增的方式進行寫存儲,當存滿半行圖像時,開始控制we信號進行讀操作,讀地址由寫地址的最高開始遞減產生,由圖6的時序分析,該方案完全滿足設計要求。

圖6 設計的LiFo時序圖
本設計采用了數據時分復用技術結合LiFo和乒乓操作對CCD42-80 Back Illuminated AIMO CCD的圖像數據進行處理,并順序的進行實時輸出,相比傳統的并行圖像傳輸方法,大大節約了數據總線資源。系統僅采用了1片Xilinx的FPGA完成了CCD時序驅動、對ADC進行同步控制及圖像的后續處理,并根據需要調用了FiFo和雙口RAM 2個IP core,使整體設計,特別是硬件設計方面得到了簡化,充分利用了FPGA在設計方面靈活可變的特點。從整個設計過程可以看出,該方法具有一定的通用性和可擴展性。在系統時鐘為64 MHz,圖像讀出時鐘為200 kHz條件下,時序驅動電路工作正常,可以滿足CCD工作的時序要求,數據處理模塊輸出的圖像實時、準確,證明了設計的可行性。目前,該設計已經成功應用于某觀測項目上,并進行了多次成像試驗,取得了比較好的效果。
[1] 寇玉民,盛宏,金祎,等.CCD圖像傳感器發展與應用[J].電視技術,2008,32(4):38-39.
[2] 王慶友.CCD應用技術[M].天津:天津大學出版社,2000.
[3] E2V Corporation.CCD42-80 AIMO FT Back Illuminated data-sheet.[EB/OL].[2012-02-26].http://www.not.iac.es/instruments/detectors/CCD13/ccd42-40_pga_bi_nimo.pdf.
[4] 姬先舉,溫志渝.基于CPLD的光積分時間可調線陣CCD驅動電路設計[J].傳感技術學報,2006,19(5):1781-1784.
[5] 冉曉強,汶德勝,鄭培云,等.基于CPLD的空間面陣CCD相機驅動時序發生器的設計與硬件實現[J].光子學報,2007,36(2):364-367.
[6] 金龍旭,李國寧,劉妍妍.幀轉移型面陣CCD驅動電路的設計[J].光學精密工程,2008,16(6):1140-1145.
[7] 張貴清,朱磊,顏露新,等.基于FPGA的多路同步實時數據采集方案設計與實現[J].測控技術,2005,24(12):26-29.
[8] 宋燕星,袁峰,丁振良.應用同步FiFo的高速圖像采集系統[J].儀器儀表學報,2006,27(6):1360-1361.