李輝景,王淑琴,任勇峰,甄國涌,焦新泉(中北大學(xué)儀器科學(xué)與動態(tài)測試教育部重點實驗室,電子測試技術(shù)重點實驗室,太原 030051)
隨著電子信息技術(shù)飛速發(fā)展,數(shù)據(jù)傳輸在傳輸速率、傳輸距離及誤碼率上有了更高的要求,現(xiàn)今工業(yè)化的應(yīng)用也越來越追求數(shù)據(jù)在遠距離傳輸、信道容量及數(shù)據(jù)準(zhǔn)確性三方面的均衡[1]。長距離傳輸時,并行方式所需成本高、布線復(fù)雜、可靠性低,所以一般采用串行傳輸。傳統(tǒng)串行傳輸技術(shù)如RS-232、RS-422、RS-485等,其數(shù)據(jù)傳輸速率都較低,最大不超過10 Mbit/s,無法滿足高速數(shù)據(jù)傳輸?shù)男枨螅?]。LVDS技術(shù)采用極低的電壓擺幅高速差動傳輸數(shù)據(jù),具有低功耗、低誤碼率、低串?dāng)_和低輻射等特點,理論傳輸速率最高可達1.923 Gbit/s,使得其在高速數(shù)據(jù)傳輸系統(tǒng)中得到廣泛的應(yīng)用,但是,LVDS信號本身只能滿足短距離傳輸,不支持遠距離傳輸。
本文設(shè)計中,為實現(xiàn)以120 Mbit/s速率在40 m電纜高速回收彈上數(shù)據(jù),在彈上采編設(shè)備與地面測試設(shè)備之間采用LVDS技術(shù),并通過硬件電路對LVDS接口增加發(fā)送驅(qū)動器及接收均衡器,補償長線傳輸帶來的信號衰減,同時,在邏輯設(shè)計上,引入反饋糾錯機制,解決LVDS信號只適合短距離傳輸?shù)娜秉c,使數(shù)據(jù)在高速遠距離傳輸過程中可靠性得到保證。
系統(tǒng)總體設(shè)計如圖1所示,由彈上采編設(shè)備、地面測試設(shè)備和計算機3部分構(gòu)成。彈上采編設(shè)備采集彈上數(shù)據(jù)并存儲;地面測試設(shè)備轉(zhuǎn)發(fā)計算機指令,并回收彈上數(shù)據(jù);計算機控制指令的發(fā)送及數(shù)據(jù)回收處理。
系統(tǒng)采用高速LVDS接口實現(xiàn)數(shù)據(jù)的高速傳輸,在數(shù)據(jù)發(fā)送端(彈上采編設(shè)備),使用SN65LV1023A串化器,將FPGA并行數(shù)據(jù)轉(zhuǎn)化為串行數(shù)據(jù)輸出,為延長LVDS信號的傳輸距離,在電纜發(fā)送端增加CLC001AJE高速驅(qū)動器,增強信號驅(qū)動能力,同時在電纜接收端(地面測試設(shè)備)采用CLC014AJE自適應(yīng)均衡器,補償信號在長距離傳輸過程中出現(xiàn)的衰減,恢復(fù)其原有性能,再通過SN65LV1224BDBR解串器,將串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù),經(jīng)USB數(shù)據(jù)接口傳輸至計算機軟件對數(shù)據(jù)進行分析和處理。
圖1 系統(tǒng)總體框圖
電纜和PCB損耗會使高頻信號邊沿變化速率降低,引入碼間串?dāng)_,導(dǎo)致高頻長距離傳輸時信號的損耗衰減。SN65LV1023A輸出差分信號壓差約200 mV,傳輸距離僅10 m左右[3],無法滿足長線傳輸?shù)男枨?。CLC001AJE芯片數(shù)據(jù)傳輸速率可達622 Mbit/s,100 mV差分輸入門限電壓,通過調(diào)節(jié)外部電阻,輸出電壓壓差1.6 V~2 V。因此,在信號發(fā)送端采用驅(qū)動芯片,將信號壓差提升至2 V,延長信號傳輸距離。
值得注意的是,CLC001AJE輸入端需端接100 Ω電阻,匹配SN65LV1023A輸出線上阻抗(端接電阻需靠近CLC001AJE輸入端放置),并保證輸入端共模電壓在0.1 V~2.3 V之間,具體電路設(shè)計如圖2所示。
圖2 LVDS高速驅(qū)動器電路設(shè)計
LVDS信號通過傳輸線會產(chǎn)生損耗,損耗與信號頻率的平方根成正比。為了使信號能被接收端可靠的接收,需在接收端補償信號衰減。CLC014AJE是美國半導(dǎo)體公司的一款自適應(yīng)均衡器,針對50 Mbit/s~650 Mbit/s信號,可自動補償其在300 m Belden 8281或120 m 5類非屏蔽雙絞線上衰減[4~5],且具有極低的抖動和功耗。電路設(shè)計時,信號輸入共模電壓保持3.4 V,同時端接100 Ω電阻,匹配傳輸線上阻抗;在ACE+、ACE-之間,串接50 pF~1 μF電容,控制均衡環(huán)路的環(huán)路響應(yīng);輸出信號進入LVDS解串器前,還需進行阻抗匹配和輸入電平控制,具體電路設(shè)計如圖3所示。
圖3 LVDS自適應(yīng)均衡器電路設(shè)計
本文設(shè)計中,采用通信技術(shù)中常用反饋糾錯傳輸方式,也稱自動請求重發(fā)(ARQ),實現(xiàn)數(shù)據(jù)的可靠傳輸。LVDS發(fā)送方數(shù)據(jù)包以1 K為單位,并采用循環(huán)冗余校驗(CRC)產(chǎn)生32位校驗碼,附于數(shù)據(jù)包之后,與數(shù)據(jù)一同發(fā)送至LVDS接收方,接收方接收到數(shù)據(jù)包n后,做相同的運算,若最終校驗結(jié)果為0,表明數(shù)據(jù)包正確,通過422接口發(fā)送確認(rèn)通知,若結(jié)果不為0,則判斷數(shù)據(jù)傳輸出現(xiàn)誤碼,通過422接口發(fā)送錯誤通知,要求發(fā)送方重傳錯誤數(shù)據(jù)包n,同時丟棄原有數(shù)據(jù)包n。然而若發(fā)送方每發(fā)送一包數(shù)據(jù)后,均等待422的反饋通知,再發(fā)送下一包數(shù)據(jù),必然導(dǎo)致數(shù)據(jù)平均傳輸速率嚴(yán)重下降。
為使數(shù)據(jù)的反饋糾錯機制以最低的帶寬損耗,達到數(shù)據(jù)的高可靠性,本設(shè)計中改進AQR工作方式,采用如圖4所示的方式傳輸。
圖4 LVDS數(shù)據(jù)包ARQ傳輸實現(xiàn)過程
數(shù)據(jù)發(fā)送方發(fā)送數(shù)據(jù)包n后,緊接著開始發(fā)送數(shù)據(jù)包n+1,當(dāng)發(fā)送第200個數(shù)據(jù)時(根據(jù)422通知的delay時間確定),檢測數(shù)據(jù)包n反饋通知(此時接收方發(fā)送的數(shù)據(jù)包n反饋通知已到達),若是錯誤通知,則重傳數(shù)據(jù)包n,若非錯誤通知,則繼續(xù)發(fā)送數(shù)據(jù)包n+1。為避免錯誤數(shù)據(jù)包一直重傳,出現(xiàn)“死機”現(xiàn)象,設(shè)置錯誤重傳計數(shù)器,數(shù)據(jù)包重傳次數(shù)達到3次后,接收方不再發(fā)送錯誤通知,存儲錯誤數(shù)據(jù)包,等待接收下一包數(shù)據(jù)。采用此種傳輸方式,只在數(shù)據(jù)包出現(xiàn)誤碼時,影響數(shù)據(jù)傳輸速率,故針對錯誤數(shù)據(jù)包出現(xiàn)概率低情況,可以最低帶寬損耗,達到數(shù)據(jù)傳輸高效、高可靠性。
LVDS數(shù)據(jù)發(fā)送方FPGA控制如圖5所示,flash_ctr模塊操作Flash讀取1 024 byte數(shù)據(jù),并行寫入緩存A(或B)、CRC校驗?zāi)K中,同時將1 024 byte數(shù)據(jù)產(chǎn)生的CRC校驗碼,與數(shù)據(jù)一并寫入緩存A(或B)中,緩存A、B以ping-pong的方式,交替緩存1 024 byte數(shù)據(jù)與其相應(yīng)的校驗碼。采用交替緩存的方式,可以確保數(shù)據(jù)發(fā)送前CRC校驗碼已寫入緩存中,消除校驗碼寫入帶來的延遲,提高數(shù)據(jù)發(fā)送速率,每完成一次緩存A(或B)寫入,將write_count加 1。
lvds_ctr模塊實現(xiàn)對外部LVDS接口控制,將數(shù)據(jù)在時鐘的上升沿送至數(shù)據(jù)接口,發(fā)送時,lvds_ctr模塊以同樣ping-pong的方式交替從緩存A、B中讀取數(shù)據(jù)并傳輸,發(fā)送完緩存A中數(shù)據(jù)后(包括1 024 byte有效數(shù)據(jù)和32bit CRC校驗碼),緊接著發(fā)送緩存B中數(shù)據(jù),當(dāng)發(fā)送第200個數(shù)據(jù)時,檢測422_ctr模塊的Error Flag,此時Error Flag表示緩存A中數(shù)據(jù)是否發(fā)送成功,若為1,則繼續(xù)發(fā)送緩存B數(shù)據(jù),并將read_count加1;若為0,則停止發(fā)送緩存B數(shù)據(jù),重新發(fā)送緩存A中數(shù)據(jù)。lvds_ctr模塊以此方式交替發(fā)送緩存A、B中數(shù)據(jù),并在發(fā)送第200個數(shù)據(jù)時,判斷上一次數(shù)據(jù)傳輸是否成功。
圖5 LVDS數(shù)據(jù)發(fā)送方邏輯設(shè)計
flash_ctr模塊和lvds_ctr模塊通過write_count、read_count實現(xiàn)對緩存A、B讀寫的相互制約,僅當(dāng)write_count-read_count<2 時,允許 flash_ctr模塊向緩存A或B中寫入數(shù)據(jù),保證緩存中數(shù)據(jù)未成功發(fā)送前不被新數(shù)據(jù)覆蓋;僅當(dāng)write_countread_count>0時,允許lvds_ctr模塊發(fā)送緩存A或B中數(shù)據(jù),保證相同數(shù)據(jù)不被多次成功發(fā)送。
LVDS數(shù)據(jù)接收方FPGA控制如圖6所示,lvds_ctr模塊控制外部LVDS接口接收數(shù)據(jù),由于接口同步原因,線路需連續(xù)傳輸數(shù)據(jù),發(fā)送方以10位數(shù)據(jù)的高兩位來區(qū)分無效數(shù)、數(shù)據(jù)包和相鄰數(shù)據(jù)包,lvds_ctr模塊在時鐘上升沿接收1 byte有效數(shù)據(jù),并將數(shù)據(jù)并行寫入緩存A(或B)、CRC校驗?zāi)K中。數(shù)據(jù)發(fā)送端每包數(shù)據(jù)包括1 024 byte和32位CRC校驗碼,lvds_ctr模塊只將1 024 byte有效數(shù)據(jù)寫入緩存A(或B),而把整包數(shù)據(jù)寫入CRC校驗?zāi)K中,校驗完成后,判斷傳輸是否產(chǎn)生誤碼,若有誤碼產(chǎn)生,則清除緩存A(或B)中數(shù)據(jù),并停止接收數(shù)據(jù),同時將Error Flag置0,等待發(fā)送方重傳數(shù)據(jù)(以10位數(shù)據(jù)高兩位判斷重傳數(shù)據(jù)的開始位置);若沒有誤碼產(chǎn)生,則繼續(xù)接收當(dāng)前數(shù)據(jù),并將當(dāng)前數(shù)據(jù)包寫入緩存B(或A)和CRC校驗?zāi)K中,重復(fù)以上操作,如此交替將有效數(shù)據(jù)寫入緩存A、B中,并在每次校驗成功后,將 write_count加 1。
圖6 LVDS數(shù)據(jù)接收方邏輯設(shè)計
422_ctr模塊根據(jù)Error Flag和Error Count決定422應(yīng)答內(nèi)容,若Error Flag為0,且Error Count<3,則發(fā)送錯誤通知;若Error Flag為1,則發(fā)送確認(rèn)通知。usb_ctr模塊控制交替讀取緩存A、B中數(shù)據(jù),并發(fā)送至USB接口,每完成一次緩存A或B讀取,將read_count加1。
lvds_ctr模塊和usb_ctr模塊與發(fā)送方一樣通過write_count、read_count實現(xiàn)對緩存 A、B讀寫的相互制約,僅當(dāng) write_count-read_count<2時,允許lvds_ctr模塊向緩存A或B中寫入數(shù)據(jù),保證緩存中數(shù)據(jù)未讀取前不被新數(shù)據(jù)覆蓋;僅當(dāng)write_count-read_count>0時,允許usb_ctr模塊發(fā)送緩存A或B中數(shù)據(jù),確保讀取數(shù)據(jù)為成功傳輸?shù)挠行?shù)據(jù)。
3.4.1 CRC校驗原理
對于待發(fā)送的k比特數(shù)據(jù)D={d0,d1,…,dk-1},采用系數(shù)為0或1的多項式D(χ)=d0·χk-1+d1·χk-2+…+dk-1·χ0表示,發(fā)送方要把數(shù)據(jù)D發(fā)送給接收方前,通信雙方約定一個r+1位二進制序列,采用多項式表示為G(χ),發(fā)送方將數(shù)據(jù)D擴展r位后得到多項式D′(χ),使D′(χ)與G(χ)做模2除法運算,得到余數(shù)多項式R(χ),構(gòu)成r位的監(jiān)督碼,附在k比特數(shù)據(jù)之后,構(gòu)成k+r位新數(shù)據(jù)D″發(fā)送至接收方,接收方接收到數(shù)據(jù)D″后,采用相同的算法,與事先約定好的多項式G(χ)做模2除法運算,若得到余數(shù)R為非0數(shù)據(jù),則接收方知道發(fā)生了錯誤,否則數(shù)據(jù)認(rèn)為正確而被接收。CRC編碼的檢錯能力與生成多項式G(χ)密切相關(guān),有效的G(χ)可使CRC編碼的漏檢率非常低[6],本文設(shè)計中選用CRC-32實現(xiàn)數(shù)據(jù)的差錯編碼。
3.4.2 基于單字節(jié)的CRC-32查找表實現(xiàn)
根據(jù)CRC校驗原理,模2除法運算的實質(zhì)是反復(fù)移入低位,消除高位。逐位運算效率太低,不適合大量數(shù)據(jù)計算,而查找表法,通過索引查找表,一次可處理多位數(shù)據(jù),效率高,有利于大量數(shù)據(jù)計算[7]。本設(shè)計中,采用的8 bit查找表實現(xiàn)CRC校驗,每次處理1 byte數(shù)據(jù),根據(jù)異或運算的交換律,(A XOR B)XOR C=A XOR(B XOR C),數(shù)據(jù)可以先與剛從寄存器移除的字節(jié)相異或,通過8 bit的反復(fù)移位和CRC除法,得到CRC余式表索引值,根據(jù)索引值進行查表,再用表值異或寄存器,得到的即為CRC校驗碼[8],1 024 byte校驗具體過程如下:
(1)復(fù)位CRC校驗?zāi)K,將32位校驗碼寄存器初值設(shè)置為0;
(2)將待校驗數(shù)據(jù)8位數(shù)據(jù)與CRC寄存器高8位異或,得到查找表索引值,并將查表所得值與CRC當(dāng)前寄存器值相異或,循環(huán)計算1 024次,最終產(chǎn)生4byte的CRC校驗碼;
(3)將校驗完成標(biāo)志置1,表示校驗完成。
LVDS發(fā)送端計算1 024 byte數(shù)據(jù)校驗碼,并將最終校驗碼附于數(shù)據(jù)包之后傳輸,接收端接收1028 byte數(shù)據(jù),做相同運算,產(chǎn)生4 byte CRC校驗碼,判斷結(jié)果是否為0,若為0,則數(shù)據(jù)無誤碼,若不為0,則存在誤碼,需重新傳輸,Verilog實現(xiàn)關(guān)鍵代碼如下:
采用4段10 m的屏蔽雙絞線,串接成一條40 m傳輸線,連接彈上采編器及地面測試臺LVDS接口,通過上位機軟件,向彈上采編器發(fā)送讀數(shù)指令,回收彈上數(shù)據(jù)。更改程序,調(diào)整LVDS數(shù)據(jù)速率為100 Mbit/s 、200 Mbit/s、300 Mbit/s、400 Mbit/s、500 Mbit/s,分別對其加入反饋糾錯機制前后實際傳輸速率及誤碼率進行測試,測試結(jié)果如表1所示。
表1 測試結(jié)果表
從測試結(jié)果可得出結(jié)論:傳輸速率100 Mbit/s以下,硬件電路能保證數(shù)據(jù)傳輸?shù)目煽啃?;傳輸速率大?00 Mbit/s時,誤碼率隨傳輸速率的增大而增加,在邏輯設(shè)計上,加入CRC校驗算法,能有效保證數(shù)據(jù)傳輸可靠性的,但會導(dǎo)致實際傳輸速率下降;當(dāng)傳輸速率大于500 Mbit/s時,由于錯誤重傳計數(shù)器的制約,數(shù)據(jù)無法可靠傳輸,同時實際傳輸速率下降。
文中針對LVDS高速長線傳輸存在數(shù)據(jù)傳輸可靠性降低的問題,從硬件電路設(shè)計上,對LVDS信號做預(yù)處理和補償,同時在邏輯設(shè)計上引入反饋糾錯機制,采用CRC算法,在很大程度上保證了數(shù)據(jù)傳輸?shù)目煽啃?,?jīng)過試驗驗證,數(shù)據(jù)以400 Mbit/s速率,在大于40 m的傳輸線上,實現(xiàn)零誤碼可靠傳輸。
[1]易敏,蘇淑靖.基于LVDS的高可靠性數(shù)據(jù)傳輸設(shè)計[J].微電子學(xué)與計算機,2014,31(9):131-134.
[2]郭寶鋒,韓壯志,何強.基于FPGA的高速數(shù)據(jù)長線傳輸系統(tǒng)的設(shè)計[J].測控技術(shù),2012,31(5):85-88.
[3]薛源,劉衛(wèi)東.一種多通道實時數(shù)據(jù)采集監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[J].計算機測量與控制,2011,19(4):863-865.
[4]薛隆全,文豐,張時華.基于LVDS總線的高速長距數(shù)據(jù)傳輸?shù)脑O(shè)計[J].電子設(shè)計工程,2009,17(2):39-42.
[5]范丹,何永強,方晉賢.高速LVDS接口電路設(shè)計[J].儀表技術(shù),2010(4):7-12.
[6]張焱,任勇峰,齊蕾.基于FPGA的CRC校驗算法的實現(xiàn)[J].電子器件,2015,38(1):222-226.
[7]畢占坤,張羿猛,黃芝平.基于邏輯設(shè)計的高速CRC并行算法研究及其FPGA實現(xiàn)[J].儀器儀表學(xué)報,2007,28(12):2244-2249.
[8]季鵬輝,孟丁,任勇峰.基于FPGA的16 bit CRC校驗查表法設(shè)計[J].電子器件,2013,36(4):580-584.
李輝景(1982-),男,漢族,福建泉州人,硬件工程師,主要從事動態(tài)測試、高速數(shù)據(jù)采集;
王淑琴(1990-),女,山西臨汾人,碩士研究生,主要從事數(shù)據(jù)采集與存儲研究,wangshuqin1117@163.com。