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