李 金,焦新泉,王淑琴,刘东海
(中北大学 电子测试技术国家重点实验室,山西 太原 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的传输速率实现零误码率传输.