單彥虎,張晉頊,任勇峰,武慧軍
(中北大學(xué)電子測試技術(shù)國家重點實驗室,山西太原 030051)
圖像數(shù)據(jù)的采集與處理在航天測試領(lǐng)域中發(fā)揮著重要作用。CameraLink接口作為高速相機最主要的標(biāo)準(zhǔn)接口之一,它的出現(xiàn)使得高速圖像源數(shù)據(jù)和圖像采集裝置之間的速度得到匹配。目前多采用串并轉(zhuǎn)換芯片組成的多種驅(qū)動器和接收器來實現(xiàn)CameraLink接口,通過CameraLink接口接收兩路圖像數(shù)據(jù)至少需要兩塊接口芯片,需要占據(jù)PCB較大的面積,由于FPGA需要接收28位并行數(shù)據(jù)所以占用了大量布線面積以及IO口資源,同時傳輸數(shù)據(jù)的速率也受轉(zhuǎn)換芯片的限制。但是使用這種方法可以減小主控芯片對CameraLink接口數(shù)據(jù)的編解碼壓力,一定程度上降低了接口開發(fā)的難度。因此,這也是目前應(yīng)用最廣泛的CameraLink接口實現(xiàn)方法[1-3]。為了適應(yīng)圖像采集裝置小型化低成本的開發(fā)要求,本設(shè)計提出采用CameraLink接口實現(xiàn)方案,在FPGA內(nèi)部的Select IO IP核源碼的基礎(chǔ)上,對IP核源碼進行適當(dāng)更改,實現(xiàn)了一種基于FPGA內(nèi)部原語的CameraLink接口的實現(xiàn)方法[4],速率可達192 MB/s,其中有效數(shù)據(jù)速率達110 MB/s。
本設(shè)計基于主控芯片F(xiàn)PGA,在不通過CameraLink串轉(zhuǎn)并芯片的情況下直接接收帶有編幀格式LVDS數(shù)據(jù),完成更高速率、無誤碼的傳輸。數(shù)據(jù)流從FPGA的IO口到FIFO緩存的實現(xiàn)過程如圖1所示。
圖1 圖像數(shù)據(jù)流框圖
CameraLink接口的數(shù)據(jù)傳輸基礎(chǔ)就是低壓差分信號(LVDS)形式傳輸。完整的CameraLink接口至少應(yīng)該包含1對TX端和RX端(發(fā)送端和接收端)。發(fā)送端采用3.5 mA的恒流源發(fā)送數(shù)據(jù),在接收端口處差分端串接1個100 Ω電阻,將電流形式的數(shù)據(jù)傳輸轉(zhuǎn)換為低壓差分電壓。發(fā)送端通過改變電流流向控制接收端電壓極性,從而控制接收端的邏輯“0”和“1”。RX端接收5路LVDS信號,其中4路為串行數(shù)據(jù)流和1路為專用串行時鐘流。接收端的主要功能是將串行數(shù)據(jù)單端信號按照解串比為1∶7進行解串,將這5條LVDS信號還原為28路并行的單端數(shù)據(jù)信號以及1路伴隨時鐘的單端信號[5]。
FPGA內(nèi)含豐富的原語和專業(yè)IP核可以將FPGA的IO例化為多種形式的電平接口。例如本設(shè)計選用的主控芯片Spartan-6 FPGA,通過配置它內(nèi)部SelectIO IP核可以將FPGA的IO引腳匹配為差分引腳,并且通過設(shè)置IP核的一些基本參數(shù)就可以將5對差分對配置為符合CameraLink接口標(biāo)準(zhǔn)的電氣接口。此設(shè)計通過調(diào)用FPGA內(nèi)核,配置IO引腳為差分模式,實現(xiàn)CameraLink接口,用來接收發(fā)送端的5路LVDS信號。內(nèi)部原理框圖如圖2所示。
圖2 FPGA內(nèi)部串轉(zhuǎn)并原理框圖
本文采用圖像標(biāo)準(zhǔn)卡作為圖像數(shù)據(jù)源。標(biāo)準(zhǔn)卡基于PCI設(shè)計,此卡作用除了產(chǎn)生特定格式數(shù)據(jù)源外還包括后期數(shù)據(jù)的回讀與回讀數(shù)據(jù)的校驗[6-7]。約定圖像數(shù)據(jù)傳輸格式為1 024×1 024如表1所示。數(shù)據(jù)源通過Camera Link接口并轉(zhuǎn)串芯片按數(shù)據(jù)格式發(fā)送數(shù)據(jù)。
表1 數(shù)據(jù)格式
CameraLink標(biāo)準(zhǔn)規(guī)定將28位的數(shù)據(jù)信號中的4位用作同步信號,保證高速傳輸模式下數(shù)據(jù)能正確接收,這4位信號中有1位保留信號,其余3位信號定義為幀同步信號(FVAL)、行同步信號(LVAL)、數(shù)據(jù)有效信號(DVAL)。當(dāng)發(fā)送新一幀數(shù)據(jù)時首先將FVAL拉高表示一幀數(shù)據(jù)即將發(fā)送,然后將LVAL拉高則表示相機要發(fā)送一行有效數(shù)據(jù),當(dāng)FVAL和LVAl同時為高后DVAL只要為高即表示有相機發(fā)送有效數(shù)據(jù)[8]。
由于有效像素數(shù)據(jù)為16 bit,設(shè)計的Camera Link接收模塊解串出來的數(shù)據(jù)位28 bit,因此需要剔除28 bit數(shù)據(jù)中的無效數(shù)據(jù)位。Camera Link標(biāo)準(zhǔn)中規(guī)定3個PORT的像素數(shù)據(jù)信號與4 bit使能信號與28 bit TX端接口位映射關(guān)系如表2所示。28-bit數(shù)據(jù)位置映射如圖3所示,其中“RxIOclk”為對像素時鐘“RxCLK IN”的解碼時鐘,芯片內(nèi)部根據(jù)該時鐘對串行數(shù)據(jù)進行采樣。同時根據(jù)Camera Link接口標(biāo)準(zhǔn)16 bit像素數(shù)據(jù)占用PORTA和PORTB兩個PORT,結(jié)合表2,接收的27位數(shù)據(jù)中的低16位即為16 bit的有效像素數(shù)據(jù),同時高3位為視頻圖像數(shù)據(jù)的同步信息位。
圖3 28-bit數(shù)據(jù)位置映射圖
表2 28-bit TX端口與PORT的映射
數(shù)據(jù)傳輸速率較快,在對圖像數(shù)據(jù)接收時,主要依靠FVAL、LVAL、DVAL 3個信號對數(shù)據(jù)圖像數(shù)據(jù)進行接收。數(shù)據(jù)接收邏輯時鐘采用55 MHz,該時鐘使用經(jīng)BUFG輸出的Gclk,數(shù)據(jù)在Gclk的上升沿由Camera Link接收模塊輸出,為了保證數(shù)據(jù)的準(zhǔn)確性,數(shù)據(jù)接收模塊在時鐘Gclk的下降沿對數(shù)據(jù)進行接收。采用BUFPLL的LOCKOUT引腳作為數(shù)據(jù)接收模塊的復(fù)位信號,當(dāng)LOCKOUT輸出為高時表示時鐘已經(jīng)同步。采用單位傳輸速率(signal data rate,SDR)模式,在55 MHz時鐘下有效像素傳輸速率可達110 MHz/s,圖4為SDR模式下數(shù)據(jù)與時鐘的對應(yīng)關(guān)系。圖5為數(shù)據(jù)接收模塊接收一行數(shù)據(jù)的邏輯實現(xiàn)流程圖。在進行數(shù)據(jù)接收時需要依靠行同步和幀同步信號,由圖6可知當(dāng)幀同步信號由低變高時表示數(shù)據(jù)新一幅圖像開始傳輸,沒有數(shù)據(jù)同步信號,當(dāng)行同步信號由低變高的上升沿即開始新一行數(shù)據(jù)傳輸。接收到數(shù)據(jù)后需要對數(shù)據(jù)進行編幀便于數(shù)據(jù)存儲和分析,根據(jù)設(shè)計需求如表3所示幀結(jié)構(gòu),其中幀頭用于開始新一幅圖像,幀計數(shù)用于計算圖像幅數(shù),數(shù)據(jù)校驗和用來后期數(shù)據(jù)處理時校驗每一幅圖像中是否有誤碼丟數(shù)情況。
圖4 SDR模式時序圖
圖5 數(shù)據(jù)接收流程
圖6 Camera Link接口時序需求
表3 數(shù)據(jù)編幀結(jié)構(gòu)
本設(shè)計Camera Link數(shù)據(jù)接收采用SDR接收模式。當(dāng)數(shù)據(jù)流的變化頻率和對應(yīng)時鐘的變化頻率相同時稱為單倍傳輸速率(signal data rate,SDR)模式,每個數(shù)據(jù)位均在時鐘的上升沿(或者下降沿)時變化[9]。SDR模式下通過時鐘的上升沿和下降沿可以比較精確的控制采樣點落到數(shù)據(jù)保持時間的中部,邏輯實現(xiàn)相對復(fù)雜,對數(shù)據(jù)的建立時間要求較低。采用FPGA中的PLL和BUFPLL實現(xiàn)對像素時鐘的倍頻和同步。圖2 Camera Link接收端FPGA實現(xiàn)原理框圖中像素時鐘CLKpixel首先經(jīng)過延時模塊平衡掉7位數(shù)據(jù)深度的延時后輸入PLL。PLL的只輸出2個時鐘信號,一個是對CLKpixel進行7倍頻得到PLL_clk用于數(shù)據(jù)和時鐘解串,另一個經(jīng)BUFG后作為全局時鐘Gclk。當(dāng)PLL用于數(shù)據(jù)接收時必須使能反饋時鐘CLKfb引腳,CLKfb是ISSERDES的時鐘反饋引腳的輸出時鐘輸出后經(jīng)BUFIOFB原語轉(zhuǎn)換后輸入,這種機制可以保證進行倍頻后的時鐘PLL_clk和原始輸入的時鐘CLKpixel保持相位相同。為了便于分析,采用28Bit獨熱碼作為數(shù)據(jù)源激勵對Camera link接口進行仿真。圖7為仿真波形截圖(沒有執(zhí)行PORT映射等操作)。根據(jù)仿真波形截圖,容易分析出接口邏輯滿足設(shè)計需求。
圖7 FPGA實現(xiàn)CameraLink接口接收端仿真波形圖
測試時將標(biāo)準(zhǔn)卡安裝在CPCI機箱上,模擬圖像數(shù)據(jù)通過2 m電纜發(fā)送至接收單元。作為圖像數(shù)據(jù)源,標(biāo)準(zhǔn)卡按照表1通過DS90285芯片發(fā)送數(shù)據(jù)。接收數(shù)據(jù)后,讀取并校驗數(shù)據(jù)的準(zhǔn)確性,發(fā)現(xiàn)數(shù)據(jù)出現(xiàn)誤碼。查看回讀后的原始數(shù)據(jù)發(fā)現(xiàn):數(shù)據(jù)行計數(shù)低二位數(shù)據(jù)容易出現(xiàn)錯誤(如圖8行計數(shù)0C錯接為0E)??紤]到數(shù)據(jù)衰減,改用0.4 m電纜傳輸,數(shù)據(jù)沒有出現(xiàn)誤碼。分析長線衰減程度:通過示波器抓取并比對發(fā)送端及接收端數(shù)據(jù)波形,接收端數(shù)據(jù)雖然衰減但仍然在LVDS信號協(xié)議可接受范圍(250~450 mV)(量取的接收端差分電壓如表4所示),從而確定長線衰減不為主要原因。
圖8 數(shù)據(jù)錯誤示意圖
表4 接收端差分電壓
在抓取接收端數(shù)據(jù)波形時發(fā)現(xiàn)有頻率約為400 kHz的干擾信號一直存在??紤]到是由于開關(guān)電源引起的干擾,量取DC/DC電源殼地間發(fā)現(xiàn)如圖9所示干擾,從波形圖中可以看出干擾峰峰值接近1.8 V,頻率大約為420 kHz,從而定位干擾源為DC/DC電源。在DC/DC接殼引腳與信號地間串接103電容,削弱干擾。量取干擾源波形如圖10,幅值被削弱。使用2 m電纜測試,數(shù)據(jù)無誤。驗證了此次接口設(shè)計的可行性。
圖9 DC/DC電源殼地間干擾
圖10 削弱后的DC/DC電源殼地間干擾
本次設(shè)計使用FPGA內(nèi)部原語ISERDES和OSERDES實現(xiàn)了Camera Link接口數(shù)據(jù)的串并之間的相互轉(zhuǎn)換,利用VHDL語言設(shè)計了數(shù)據(jù)接收邏輯和編幀邏輯。本設(shè)計基于FPGA的CameraLink接口在55 MHz時鐘下實現(xiàn)110 MHz/s的數(shù)據(jù)接收。在FPGA的IO口短缺或是內(nèi)部資源足夠的情況下,完全可以使用原語編程代替串并轉(zhuǎn)換芯片實現(xiàn)CameraLink接口數(shù)據(jù)的串并轉(zhuǎn)換。