甄國(guó)涌,丁潤(rùn)琦,張凱華
(1.中北大學(xué),山西太原 030051;2.電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西太原 030051;3.儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
伴隨著高幀頻、高像素的工業(yè)相機(jī)應(yīng)用越來(lái)越廣泛,對(duì)圖像數(shù)據(jù)的傳輸速率以及可靠性提出了更高的要求[1]。目前圖像數(shù)據(jù)傳輸主要采用IEEE-1394、LVDS以及Camera Link等標(biāo)準(zhǔn)接口協(xié)議。Camera Link接口采用串并結(jié)合的傳輸方式相對(duì)于其他協(xié)議具有更高的傳輸速度和更強(qiáng)的抗干擾性能,并且輸出總線(xiàn)較少,便于設(shè)計(jì)開(kāi)發(fā),Camera Link接口協(xié)議已經(jīng)逐漸成為數(shù)字圖像傳輸設(shè)計(jì)中的首選接口協(xié)議,因此選用Camera Link作為此次設(shè)計(jì)的圖像傳輸接口[2]。在FPGA邏輯設(shè)計(jì)中通過(guò)對(duì)Camera Link接口時(shí)序進(jìn)行優(yōu)化設(shè)計(jì)以及采用CRC+ECC雙校驗(yàn)結(jié)合的方法進(jìn)一步提高了數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
本文設(shè)計(jì)的圖像傳輸系統(tǒng)主要由高速圖像信源卡、高速圖像記錄器以及上位機(jī)組成,如圖1所示。其中高速圖像信源卡的主要功能為模擬工業(yè)相機(jī)對(duì)圖像數(shù)據(jù)傳輸和指令互傳準(zhǔn)確性進(jìn)行測(cè)試。高速圖像記錄器作為圖像數(shù)據(jù)接收端用于在惡劣測(cè)試環(huán)境下接收并存儲(chǔ)圖像數(shù)據(jù)。
系統(tǒng)的工作流程為FPGA首先收到由上位機(jī)發(fā)送的圖像加載命令,并準(zhǔn)備接收PCI總線(xiàn)上的數(shù)據(jù),F(xiàn)PGA將接收的數(shù)據(jù)寫(xiě)入DDR中,當(dāng)DDR中緩存了完整一幀圖像后,F(xiàn)PGA將DDR中的數(shù)據(jù)通過(guò)Camera Link接口將LVCMOS/LVTTL信號(hào)轉(zhuǎn)換為L(zhǎng)VDS信號(hào)發(fā)送到圖像記錄器。圖像記錄器接收到圖像數(shù)據(jù)后,先將數(shù)據(jù)緩存在DDR中,當(dāng)接收了完整一幀圖像后,F(xiàn)PGA將緩存讀出,并寫(xiě)入到FLASH存儲(chǔ)陣列中。RS-422接口主要完成設(shè)備之間的指令相互傳輸。
圖1 整體設(shè)計(jì)框圖
Camera Link接口標(biāo)準(zhǔn)協(xié)議包括用于命令傳輸?shù)拇型ㄐ判盘?hào)、用于采集卡對(duì)相機(jī)控制的控制信號(hào)、電源信號(hào)以及圖像數(shù)據(jù)信號(hào)。其中圖像數(shù)據(jù)信號(hào)由28位信號(hào)組成,包括24位數(shù)據(jù)信號(hào)和4位數(shù)據(jù)有效信號(hào)。數(shù)據(jù)有效信號(hào)包括幀同步FVAL、行同步LVAL、數(shù)據(jù)有效DVAL以及保留信號(hào)SPARE[3]。
在此次設(shè)計(jì)中圖像發(fā)送端選用Camera Link接口專(zhuān)用驅(qū)動(dòng)芯片DS90CR285,在接收端選用DS90CR286作為接收芯片。該芯片支持的最大像素時(shí)鐘為66 MHz,圖像數(shù)據(jù)最大傳輸速度為1.848 Gbit/s,且該芯片實(shí)現(xiàn)Camera Link接口通訊較簡(jiǎn)便,電路原理框圖如圖2所示[4]。
圖2 Camera Link接口電路原理框圖
為保證使用Camera Link接口發(fā)送圖像數(shù)據(jù)時(shí)數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,需要按照協(xié)議對(duì)接口同步信號(hào)嚴(yán)格控制[5]。在圖像數(shù)據(jù)開(kāi)始發(fā)送時(shí)需先將幀同步信號(hào)置為‘1’;之后在經(jīng)過(guò)10個(gè)時(shí)鐘后將行同步信號(hào)置為‘1’,發(fā)送一行數(shù)據(jù),當(dāng)一行數(shù)據(jù)發(fā)送完成后需等待10個(gè)時(shí)鐘周期后才可發(fā)送下一行數(shù)據(jù)。當(dāng)幀同步、行同步和數(shù)據(jù)有效信號(hào)同時(shí)有效時(shí),圖像依次發(fā)送。發(fā)送完成后FVAL在10個(gè)時(shí)鐘周期后置低,結(jié)束數(shù)據(jù)發(fā)送[6]。圖像數(shù)據(jù)發(fā)送時(shí)序仿真如圖3所示。
圖3 圖像數(shù)據(jù)發(fā)送時(shí)序仿真圖
為保證圖像數(shù)據(jù)的傳輸時(shí)序滿(mǎn)足驅(qū)動(dòng)器DS90CR285的建立/保持時(shí)間,需對(duì)Camera Link接口時(shí)序進(jìn)行優(yōu)化設(shè)計(jì)。Camera Link的驅(qū)動(dòng)器和接收器在進(jìn)行圖像數(shù)據(jù)傳輸前需保證兩端的鎖相環(huán)同步,為保證兩端快速同步,在上電復(fù)位完成后,驅(qū)動(dòng)器不斷地向接收器發(fā)送無(wú)效遞增數(shù),接收器根據(jù)不斷變化的數(shù)據(jù)流快速對(duì)時(shí)鐘解碼,達(dá)到鎖相環(huán)同步的目的[7]。
驅(qū)動(dòng)器要求數(shù)據(jù)的建立時(shí)間不少于2.5 ns,為確保數(shù)據(jù)穩(wěn)定達(dá)到驅(qū)動(dòng)芯片的建立時(shí)間,使用FPGA中的DCM模塊對(duì)圖像數(shù)據(jù)進(jìn)行移相操作,為保證驅(qū)動(dòng)器在時(shí)鐘下降沿采樣時(shí)數(shù)據(jù)已經(jīng)達(dá)到穩(wěn)定狀態(tài),將時(shí)鐘相移90°。由于采用的是50 MHz的采樣時(shí)鐘,則采樣時(shí)間延遲5 ns,滿(mǎn)足數(shù)據(jù)的建立時(shí)間。使用示波器測(cè)量輸入的并行數(shù)據(jù)最低位與像素時(shí)鐘的波形如圖4所示。
圖4 相移前與相移后波形圖
雙校驗(yàn)邏輯實(shí)現(xiàn)流程為:Camera Link數(shù)據(jù)的發(fā)送端和接收端在發(fā)送和接收數(shù)據(jù)時(shí)都以1 024字節(jié)為一包數(shù)據(jù)。當(dāng)發(fā)送端將一包數(shù)據(jù)發(fā)送完成后緊接著發(fā)送這一包數(shù)據(jù)的雙校驗(yàn)碼,接收端在接收數(shù)據(jù)的同時(shí)計(jì)算該包數(shù)據(jù)的雙校驗(yàn)碼,在接收端接收完成一包數(shù)據(jù)后首先判斷發(fā)送端發(fā)送的CRC值與接收端接收的CRC值是否一致。如果CRC校驗(yàn)值一致表示數(shù)據(jù)正確,準(zhǔn)備接收下一包數(shù)據(jù);若CRC校驗(yàn)值不一致,則通過(guò)對(duì)該數(shù)據(jù)包的ECC校驗(yàn)碼進(jìn)行判斷并計(jì)算出該數(shù)據(jù)包中數(shù)據(jù)出錯(cuò)的位置。若ECC判斷錯(cuò)誤位數(shù)較少可糾正,則對(duì)該出錯(cuò)數(shù)據(jù)取反糾正;若錯(cuò)誤位數(shù)較多,不可糾正,則數(shù)據(jù)接收端向發(fā)送端發(fā)送重傳請(qǐng)求。
3.2.1 CRC校驗(yàn)邏輯實(shí)現(xiàn)
數(shù)據(jù)以1 024字節(jié)為一包,為保持較高的檢錯(cuò)率在邏輯設(shè)計(jì)時(shí)選用CRC16校驗(yàn)方法。對(duì)于數(shù)據(jù)量較多的運(yùn)算,傳統(tǒng)的逐位串行運(yùn)算校驗(yàn)速率較低,耗費(fèi)時(shí)鐘周期較長(zhǎng)。而通過(guò)使用查表法CRC運(yùn)算可并行處理接收的數(shù)據(jù),效率較高,適合大量數(shù)據(jù)校驗(yàn)[8]。在傳輸過(guò)程中發(fā)送端和接收端都進(jìn)行CRC校驗(yàn),若接收端和發(fā)送端的校驗(yàn)結(jié)果不一致,則表明在數(shù)據(jù)傳輸過(guò)程中出現(xiàn)誤碼或丟數(shù)現(xiàn)象,反之,則說(shuō)明數(shù)據(jù)在傳輸過(guò)程中無(wú)錯(cuò)誤。
3.2.2 ECC校驗(yàn)邏輯實(shí)現(xiàn)
ECC校驗(yàn)是由奇偶校驗(yàn)方法發(fā)展而來(lái),ECC校驗(yàn)是將數(shù)據(jù)塊看做矩陣,通過(guò)計(jì)算行、列校驗(yàn)碼來(lái)對(duì)數(shù)據(jù)進(jìn)行檢驗(yàn)以及糾錯(cuò)。ECC校驗(yàn)方法可以對(duì)一位錯(cuò)誤糾錯(cuò),可以檢驗(yàn)出兩位錯(cuò)誤但是無(wú)法糾正[9]。ECC校驗(yàn)示意圖如圖5所示。
圖5 ECC校驗(yàn)示意圖
ECC校驗(yàn)過(guò)程為:首先將需發(fā)送的數(shù)據(jù)塊中的數(shù)據(jù)字按位異或,將得到的異或結(jié)果與P1、P1′、P2、P2′等異或,得到列校驗(yàn)碼。每次發(fā)送完成數(shù)據(jù)字后便將該字與P16、P16′、P32、P32′等異或,得到行校驗(yàn)碼。當(dāng)數(shù)據(jù)塊中的數(shù)據(jù)字發(fā)送完成后,計(jì)算的結(jié)果即為該數(shù)據(jù)塊的ECC校驗(yàn)值。將信號(hào)發(fā)送端和接收端計(jì)算的ECC校驗(yàn)碼根據(jù)奇偶位可分為4組12位校驗(yàn)碼。
ECC_tx_odd<= P2048&P1024&……P8&P4&P2&P1
ECC_tx_even<= P2048′&P1024′&……P8′&P4′&P2′&P1′
ECC_rx_odd<= P2048&P1024&……P8&P4&P2&P1
ECC_rx_even<= P2048′&P1024′&……P8′&P4′&P2′&P1′
ECC_result<= ECC_tx_odd⊕ECC_rx_odd⊕ECC_tx_even⊕ECC_rx_even
其中ECC_result為數(shù)據(jù)的ECC校驗(yàn)值。若數(shù)據(jù)的ECC校驗(yàn)結(jié)果全為‘0’則表示數(shù)據(jù)正確,若結(jié)果全為‘1’表示數(shù)據(jù)中只有1位錯(cuò)誤,若為其他值表示數(shù)據(jù)中存在多位錯(cuò)誤。ECC糾錯(cuò)方法:ECC_addr<= ECC_tx_odd⊕ECC_rx_odd,得到的結(jié)果中高8位表示錯(cuò)誤的字地址,低4位表示出錯(cuò)的位地址。通過(guò)地址找到出錯(cuò)的位置取反即可糾正。
3.2.3 發(fā)送端邏輯實(shí)現(xiàn)
Camera Link發(fā)送端采用乒乓操作的方式進(jìn)行數(shù)據(jù)發(fā)送,發(fā)送端首先發(fā)送RAM1中的數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)送完成后緊接著發(fā)送2個(gè)ECC校驗(yàn)值和1個(gè)CRC校驗(yàn)值。當(dāng)RAM1中的數(shù)據(jù)以及雙校驗(yàn)碼發(fā)送完成后,發(fā)送端緊接著向RAM2緩存下一包數(shù)據(jù)并等待接收端的重傳請(qǐng)求,如果無(wú)重傳請(qǐng)求,數(shù)據(jù)發(fā)送端將RAM2中緩存的數(shù)據(jù)讀出并發(fā)送。若發(fā)送收到重傳請(qǐng)求,則再次將RAM1中的數(shù)據(jù)讀出并發(fā)送。為保障數(shù)據(jù)的傳輸效率,發(fā)送端在第2次發(fā)送完成后,不再等待重傳請(qǐng)求直接開(kāi)始發(fā)送下一包數(shù)據(jù),發(fā)送端工作流程圖如圖6所示[10]。
圖6 發(fā)送端工作流程圖
3.2.4 接收端邏輯實(shí)現(xiàn)
數(shù)據(jù)接收端將收到的圖像數(shù)據(jù)寫(xiě)入RAM中,并計(jì)算這一包數(shù)據(jù)的CRC和ECC校驗(yàn)值。如果CRC校驗(yàn)值一致表明接收到的數(shù)據(jù)包正確,不需要糾正或重傳,等待接收下一包數(shù)據(jù);若不一致則根據(jù)ECC校驗(yàn)值判斷出錯(cuò)的位數(shù),如果出錯(cuò)的位數(shù)為一位,根據(jù)ECC校驗(yàn)結(jié)果計(jì)算出錯(cuò)的位置并進(jìn)行取反糾錯(cuò),否則請(qǐng)求重傳。接收端工作流程圖如圖7所示。
圖7 接收端工作流程圖
為驗(yàn)證圖像傳輸?shù)目煽啃裕褂脠D像信源卡、圖像記錄器以及上位機(jī)構(gòu)成一個(gè)閉環(huán)測(cè)試系統(tǒng)。使用地面測(cè)試電纜,連接圖像信源卡和圖像記錄器的Camera Link接口,使用上位機(jī)軟件向信源卡發(fā)送圖像傳輸指令,圖像傳輸完成后回讀圖像記錄器中的FLASH數(shù)據(jù)。
在傳輸距離為5 m的要求下,對(duì)該設(shè)計(jì)進(jìn)行測(cè)試。通過(guò)信源卡向圖像記錄器發(fā)送16 bit的遞增數(shù)信號(hào),圖像記錄器接收的圖像如圖8所示,可看出像素點(diǎn)無(wú)突變。
在不同傳輸距離和不同數(shù)據(jù)量下對(duì)圖像數(shù)據(jù)傳輸可靠性進(jìn)行測(cè)試,測(cè)試結(jié)果如表1所示。
根據(jù)測(cè)試結(jié)果可知,在不使用雙校驗(yàn)邏輯的情況下數(shù)據(jù)誤碼較多,且隨著傳輸距離和數(shù)量的增加誤碼也增加。在加入雙校驗(yàn)邏輯后,在短距離、大數(shù)據(jù)量的情況下都不會(huì)出現(xiàn)誤碼,在較長(zhǎng)距離的情況下會(huì)有少數(shù)的誤碼,誤碼率低于一百億分之一。
圖8 16 bit灰度圖像
表1 誤碼統(tǒng)計(jì)表
針對(duì)圖像數(shù)據(jù)在高速傳輸時(shí)可靠性較低的問(wèn)題,設(shè)計(jì)了基于Camera Link的高可靠性圖像數(shù)據(jù)傳輸系統(tǒng)。通過(guò)對(duì)接口時(shí)序進(jìn)行優(yōu)化設(shè)計(jì)以及使用CRC校驗(yàn)與ECC校驗(yàn)結(jié)合的雙校驗(yàn)方法,提高了Camera Link接口在傳輸圖像數(shù)據(jù)的可靠性。經(jīng)試驗(yàn)驗(yàn)證,加入雙校驗(yàn)邏輯后,誤碼率低于一百億分之一,圖像數(shù)據(jù)傳輸可靠性顯著提升。參考文獻(xiàn):
[1] 杜文略,李紅薇,高越.水下試驗(yàn)圖像數(shù)據(jù)采集存儲(chǔ)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子器件,2019,42(3):733-739.
[2] 隋延林,何斌,張立國(guó),等.基于FPGA的超高速Camera Link圖像傳輸[J].吉林大學(xué)學(xué)報(bào)(工學(xué)版),2017,47(5):1634-1643.
[3] 邱揚(yáng)剛,邱琦,趙民偉,等.基于Camera Link的高速圖像采集技術(shù)研究與應(yīng)用[J].計(jì)算機(jī)測(cè)量與控制,2018,26(4):239-242.
[4] 魏淑穩(wěn).基于FPGA的Camera Link圖像數(shù)據(jù)采集裝置的研究與實(shí)現(xiàn)[D].太原:中北大學(xué),2019.
[5] 張維達(dá),崔明,張甫愷.基于異步FIFO的Camera Link數(shù)字圖像光纖傳輸技術(shù)[J].儀表技術(shù)與傳感器,2016(7):47-50.
[6] 汝興海.圖像數(shù)據(jù)高速傳輸和數(shù)據(jù)存儲(chǔ)的關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[D].太原:中北大學(xué),2016.
[7] 劉源,李慶,梁艷菊.基于FPGA的紅外目標(biāo)自動(dòng)檢測(cè)系統(tǒng)[J].紅外技術(shù),2019,41(6):521-526.
[8] 李輝景,王淑琴,任勇峰,等.基于CRC校驗(yàn)的高速長(zhǎng)線(xiàn)LVDS傳輸設(shè)計(jì)[J].電子器件,2015,38(6):1346-1351.
[9] 朱金瑞,王代華,蘇尚恩,等.存儲(chǔ)式彈載數(shù)據(jù)記錄儀存儲(chǔ)可靠性技術(shù)研究[J].兵器裝備工程學(xué)報(bào),2019,40(1):159-162.
[10] 范君健,吳國(guó)東,王志軍,等.基于FPGA的高精度彈載壓力數(shù)據(jù)采集系統(tǒng)[J].兵器裝備工程學(xué)報(bào),2017,38(9):102-107.