李 金,焦新泉,王淑琴,劉東海
(中北大學 電子測試技術國家重點實驗室,山西 太原 030051)
隨著電子技術的飛速發展,數據傳輸系統被廣泛使用于越來越多的領域中,如工業控制、遠程通信、動態測試等領域.伴隨應用的逐漸深入,人們對數據傳輸系統的高速性、實時性、可靠性以及傳輸距離的要求越來越高[1-3].基于某測試任務,由于測試環境惡劣,為保證測試人員的安全,數據采用長線傳輸.同時測試環境電磁干擾較大,并且采用多級電連接器連接成的長電纜,進一步加大了數據傳輸的難度.而單純使用LVDS接口,其信號本身傳輸的距離只有幾米,在如此惡劣的環境下,仍然無法完成測試任務[4-6].所以在硬件電路的設計中給發送端加入了電纜驅動器,給接收端加入電纜均衡器以補償信號在長電纜上的衰減.在此條件下對邏輯進行優化,設計了數據包的反饋重傳機制,并且對碼流重新編譯,設計了10B/6B編碼,對數據進行前向糾錯,有效提高了數據長線傳輸的可靠性.
在復雜惡劣環境下工作的現場采集設備,采集多路傳感器的模擬信號并接受PCM碼流,在FPGA內部進行打包編幀.數據包以8 K為單位,采用CRC校驗將產生的32 b校驗碼附于數據包的末尾,然后對數據進行10B/6B編碼后輸出,當遠程控制測試設備通過上位機下發數據接收指令后,數據由LVDS接口發出,并經過多段串行屏蔽雙絞線后由遠程設備接收,上位機對接收到的數據進行判別.為模擬現場多級電連接器的環境,試驗采用了1根50 m,3根10 m和3根 3 m 的電纜串聯構成了89 m的屏蔽雙絞電纜.系統總體框圖如圖1 所示.

圖1 系統總體框圖Fig.1 Overall block diagram of the system
低壓差分信號技術LVDS (Low Voltage Differential Signaling),采用低壓擺幅和和低電流驅動輸出,具有很強的抗干擾性[4,7-8].DS92LV1023和DS92LV1224是美國NI公司的10 b總線型低壓差分信號板級通訊芯片組,其中DS92LV1023是高速串行差分數據流的串化器;DS92LV1224是接收該差分數據流并將它們轉化為并行數據的解串器[9].
在主動工作狀態下,系統上電后,DS92LV1023和DS92LV1224先置所有的輸出引腳為3態,然后啟動鎖相環跟蹤并鎖定本地的TCLK和REFCLK時鐘.其中LVDS發送模塊的串化器連續向所連接的被測設備中的解串器發送同步信號,當解串器鎖相環鎖定同步時鐘成功后,串化器開始發送串行數據,LVDS發送電路如圖2 所示.

圖2 LVDS發送電路Fig.2 LVDS transmission circuit

為延長LVDS數據發送的距離,增加了電纜驅動器和均衡器,來增強信號的驅動能力和補償能力.驅動器和均衡器選用NS公司的CLC001AJE和CLC014AJE,CLC001AJE的傳輸速率可達622 Mbps,通過配置外圍電阻可將DS92LV1023輸出的低壓差分信號的壓差從200 mV 提升至0.9 V~1.1 V,有效增強了信號的驅動能力.在信號的接收端,信號經過屏蔽,雙絞線有衰減,很容易造成碼間串擾,CLC014AJE可針對對帶寬為50~650 Mbps的信號進行補償.恢復信號強度后,再通過DS92LV1224將串行數據解串[10].
為保證LVDS數據的高可靠性傳輸,在數據傳輸的設計上采用帶CRC校驗的反饋糾錯重傳機制和線上前向糾錯編碼相結合的方式.
數據包以2 K為單位,在發送前采用CRC查找表的方法產生32 b校驗碼,附于8 K數據之后,然后對每字節數據進行10B/6B重新編碼,將重新編碼后的數據通過LVDS接口發送至接收方.LVDS接收方接收到數據后,做先逆向解碼,然后再將2 K數據做相同的CRC運算得到校驗碼,并與接收到的校驗碼比較,若校驗碼相同,則通過422發送數據確認指令;若校驗碼不同,說明數據包中有誤碼,則丟棄這包2 K數據,并向發送方發送重傳指令,且設置重傳3次為上限,防止因數據一直錯誤而循環重傳造成“死機”.
在數據的實際傳輸過程中,若發送方每發送 2 K 數據,均等待接收方反饋后,再通知發送下一個 2 K 數據,必然會導致數據傳輸速率的下降.所以,開2個4 K的RAM進行交替緩存,實現兩個RAM緩存的流水線作業.
如圖4 所示,對于發送方而言,數據經過main_ctr模塊,以ping-pong的方式交替寫入2個RAM緩存,每完成2 K數據寫入后,寫緩存計數write_cnt加1,CRC_check模塊從2個RAM中同樣以ping-pong方式交替讀出,CRC校驗碼生成后附加在2 K數據之后,讀緩存計數read_cnt加1.通過計算write_cnt和read_cnt的差值,來對A,B2個RAM進行讀寫控制,實現流水線作業,提高了數據傳輸效率,數據接收端原理類似.

圖4 數據傳輸鏈路設計Fig.4 Data transmission link design
3.2.1 CRC校驗原理
對于要發送的信息碼M有k位數據M=(mk-1,mk-2,…,m1,m0),k個信息位可表示為多項式M(x)的系數,即
M(x)=mk-1·xk-1+mk-2·xk-2+…+
m1·x1+m0·x0.
他開始關心女孩的身世,不僅是好奇,而是真心地希望知道。他開始關注女孩身體上的傷口,因它們的存在而感到心疼,同時,也因它們愈合得毫無疤痕而開心,就像望著一塊破碎的美玉,一點一點地復原。
(1)
發送方與接收方約定一個n階生成多項式表示為g(x),則在式(1)兩端乘以xn得到
xnM(x)=mk-1·xn+k-1+mk-2·xn+k-2+
…+m1·xn+1+m0·xn.
(2)
xnM(x)與g(x)做模2除法運算,得到t-1階余數多項式R(x),R(x)可表示為
R(x)=rt-1·xt-1+rt-2·xt-2+
…+r1·x1+r0·x0.
(3)
構成t位的監督碼附在數據M之后,將構成的新數據M′=(mk-1,mk-2,…,m1,m0,rt-1,rt-2,…,r1,r0)發送至接收方.接收方收到后,做相同運算,與約定的的生成多項式g(x)做模2除法運算,若得到余數為0,則認為接收到的數據正確,反之錯誤.
3.2.2 CRC校驗優化設計
針對模2除法的運算,實質上是通過反復移入低位,消除高位來完成的,逐位運算效率較低.優化后的設計采用的CRC查找表法,一次可處理多位數據,大幅提高效率,有利于大數據量的運算.本設計利用4 bit查找表實現CRC校驗,所構建的查找表僅為16個.
3.3.1 10B/6B編碼原理
由線性分組碼的編碼原理可知,要求(n,k)分組碼必須滿足2r-1≥n(r=n-k)的條件,才能使用r個監督位來構造出r個監督關系式[8,11],并且利用監督關系式來唯一確定數據中的一位誤碼有可能出現在的所有位置,以此來實現數據傳輸過程中的1位誤碼糾錯.LVDS的傳輸過程是將10 bit 數據并行發送給接口芯片進行串化,因此至少需要4 bit的來完成對10 bit數據的監督.
3.3.2 10B/6B編碼邏輯設計
在10B/6B的編碼中,1個完整碼組中出現的1位誤碼,其所在位置與編碼過程中所設定的校正子是有唯一對應關系的,如表1 所示.
由表1 可知,當誤碼位置出現在a0,a2,a3,a6,a8時,校正子S1=1,否則S1=0.因此有
S1=a0⊕a2⊕a3⊕a6⊕a8.
(4)
同理有
S2=a0⊕a1⊕a2⊕a3⊕a9,
(5)
S3=a1⊕a3⊕a5⊕a7⊕a9,
(6)
S4=a1⊕a2⊕a4⊕a7⊕a8.
(7)

表1 校正子與誤碼位置關系Tab.1 Corrector and error position relationship
對數據進行重新編碼時選取10位數據中的高6位a9,a8,a7,a6,a5,a4為信息碼元,而低4位a3,a2,a1,a0則為監督碼元,信息碼元為實際傳輸中的有效數據,而監督碼元則是由監督關系式決定的,由以下4個監督方程式唯一確定
a0=a4⊕a5⊕a6⊕a9,
(8)
a1=a6⊕a8⊕a9,
(9)
a2=a4⊕a6⊕a7⊕a9,
(10)
a3=a5⊕a6⊕a7⊕a8.
(11)
由上述的4個方程式可以得到64個許用碼組,用以傳輸LVDS數據.LVDS有效數據每個字節需要發送兩次,第一次發送低4 bit,第二次發送高4 bit,LVDS數據的高兩位作為高低bit標示.LVDS數據10位數據位的具體含義見表2.

表2 LVDS數據位具體含義Tab.2 LVDS data bit specific meaning
無效數據0000011111作為同步碼,在線上空閑時發送,用于LVDS器件的鎖定和同步,本設計在數據傳輸的過程中采用有效數據和同步碼交替發送的方式,在總線空閑時,發送端發送同步碼來填充鏈路,使數據傳輸鏈路保持通暢,這種傳輸方式既保證了有效數據碼率與發送碼率相匹配,又提高了數據傳輸鏈路的可靠性[12].同步碼因為沒有實際意義,所以沒有必要對同步碼進行編碼,從而節省帶寬.
在傳輸距離為89 m,傳輸速率為330 Mbps的條件下,并且經過10輪-40 ℃~60 ℃的溫度循環試驗的測試,讀取數據,利用上位機對數據進行分析處理,結果為幀計數連續,沒有出現丟數、多數和誤碼的現象,實現了LVDS數據的高可靠性長線傳輸.原始數據如圖5 所示,其中55AA為幀同步字,146F為幀標志,每一幀還包括4 B的幀計數.

圖5 原始數據Fig.5 Raw data
本文對利用LVDS來進行長線傳輸的系統分別從硬件和軟件2個方面做出了優化設計,硬件方面增加信號的驅動和補償能力,軟件方面加入CRC校驗算法和10B/6B編碼算法,提高了數據傳輸的可靠性.經試驗驗證,經過優化后的該系統運行穩定、可靠性高,能夠在多級電連接器串聯的89 m長電纜上,以330 Mbps的傳輸速率實現零誤碼率傳輸.