尚辰阳,任勇峰
(中北大学,仪器科学与动态测试教育部重点实验室,电子测试技术国家重点实验室,山西太原 030051)
随着科学技术的不断发展,人们对于数据传输的需求呈现爆发式的增长,因此对于传输距离、传输速率、传输的误码率以及实时性有着越来越高的要求。在某次远距离的测试任务中,需要将系统采集到的多路模拟信号传回给地面接收设备,并且保证实时性和可靠性。若采用传统的并行传输方式,传输速率可以满足要求,但是由于接口数量过多,导致误码率增高,无法满足长距离数据传输可靠性的要求。而串行传输的方式中,RS422与RS485的最大传输速率为10 Mbit/s,无法满足长距离传输的传输速率的任务要求,因此采用LVDS技术作为该方案的传输方式[1]。
LVDS传输数据时采用低压差分信号,信号的传输速度理论上可达1.923 Gbit/s,满足本文设计的远距离系统的传输速率要求[2]。为提高传输距离,在硬件电路中加入均衡器和驱动器用以实现远距离传输的目的。
考虑到环境中的不可控因素以及电磁干扰,进一步降低误码率实现优化设计,软件设计中采用了8B/10B编码方式,可以非常好地控制0、1码元的个数[3],这样可以使得在系统中传输的信号保证直流平衡,从而满足信号在传输过程中高可靠性、低误码率的要求。
LVDS是一种低功耗、低摆幅、低误码率的低压差分信号技术,该信号靠电流驱动。采用差分传输方式,2个信号振幅相等,相位差180°,极性相反,互相耦合,因此在接收端就可以抵消耦合的噪声[4]。
图1为远距离系统的设计方案框图,采集到的数据经过发送端时,通过LVDS编码芯片完成编码,之后由硬件电路中的电缆驱动器和自适应电缆均衡器进行调节。信号经过调节之后,可以提高信号的驱动能力并且补偿信号的衰减,从而实现LVDS信号远距离传输的目的[5]。LVDS信号在接收端完成解码,解码完成后的数据再发送给上位机,之后分析数据。FPGA控制器接收上位机的命令,再控制LVDS通信控制模块将相应的指令通过通信接口发送出去。同时还可以将通过通信接口收到的数据经过LVDS通信控制模块传给上位机进行观察与分析。
图1 远距离系统
在本次测试任务中,采用平衡双绞线连接数据采集模块和上位机,采集到的数据经过LVDS编码之后,以500 Mbit/s的码率在平衡双绞线中进行传输,通过验证上位机采集到的实验数据的正确性来判断该系统的可靠性和有效性[6]。
由于在长距离传输过程中的趋肤效应,以及传输介质的介质损耗,LVDS信号在长距离传输过程中会有所衰减,这2个因素也会降低信号的传输速率、增加信号的误码率,从而会降低信号的传输质量,是造成传输信号不稳定的主要原因[7]。而且信号的衰减与信号频率的平方根和传输速度成正比,在信号长距离传输过程当中,衰减对会非常显著地降低信号传输的可靠性。
为了降低因趋肤效应和介质损耗带来的信号衰减和误码率,保证信号在远距离传输中的传输质量。在本系统的硬件电路设计中,采用了可以对信号进行补偿的电缆驱动器芯片CLC001和自适应电缆均衡器芯片LMH0074,硬件框图如图2所示。这两个芯片均采用了预加重和均衡技术。因此可以满足降低信号衰减、提高数据传输可靠性的目的[8]。
图2 硬件电路部分
LVDS发送芯片均采用10位LVDS串行器SN65LV1023A,数据输出接口采用ADN4651进行隔离,驱动器采用CLC001,每路的接口电路如图3所示。
图3 LVDS发接口电路
LVDS解串芯片采用的10位LVDS解串器芯片SN65LV1023B,在数据进入解串器之前,加一个隔离缓冲器ADN4651实现阻断外部干扰的目的。采用均衡芯片LMH0074目的是对电缆进行自适应均衡将抖动减小到最小。接收电路图如图4所示串行器的芯片和解串器的芯片的引脚功能基本相同。
图4 LVDS接收口电路
在串行通信过程当中,电容阻抗与信号频率成反比。即电容阻抗随着信号频率的增高而降低。当数据位流中出现多个连续的1或0时,可以认为该时间段信号是直流的。但如果因为信号频率的影响使电容的损耗变大,导致信号的幅度降低,直流信号就会被滤除,到接收端则无法识别是1还是0。而且当接收端收到连续的1或0时,因为在码字中没有充分的定时信息,对接收端的解码带来了困难。而在远距离传输系统的软件设计中,信号的传输采用8B/10B的编解码方式,该方式可以使LVDS数据流中的“1”、“0”个数比例达到平衡从而可以保证信号的直流平衡,而信号中连续的“1”的个数或者连续“0”的数量不会超过5个[10]。因此为了保证信号在远距离传输中的直流平衡以及提高远距离传输系统的可靠性和有效性,在本次传输系统采用8B/10B编解码[11]。
3.1.1 8B/10B编码原理
8B/10B编码主要方法:将码流中的8 bit数据分成2个编码模块来实现,2个模块分别是3B/4B编码模块和5B/6B编码模块。其中3B/4B编码模块的功能是将传输的原信息码流中的8 bit数据,按照既定的编码规则,将高3位映射成新信息码流10 bit数据中的低4位。同理,按照编码规则,5B/6B编码模块是将原码流中8 bit数据中的另外低5位映射成新信息码流10 bit数据中的高6位。在得到映射之后的10 bit码流后,再进行并串转换,将并行数据变成串行数据高速发送出去[12]。
8B/10B编码方式保证输出码流直流平衡的方法是采用不平衡度(RD)。规则如下:RD在码字中“0”的个数大于“1”个数的情况下为“0”,此时不平衡度呈现负极性;当码字中“0”的个数小于“1”的个数时,RD为“1”,此刻不平衡度呈现为正极性。输出的码流会根据不平衡度RD的极性是正还是负来做出相应的调整,从而实现输出码流的直流平衡,降低误码率也可以通过提高对码流的检错能力的方式来实现[13]。编码系统框图如图5所示。
图5 8B/10B编解码总体框图
3.1.2 工作时钟产生模块
根据8B/10B的编码原理,将8B/10B的顶层模块拆成2个子模块,分别为5B/6B编码模块和3B/4B编码模块。同时数据以并行的方式输入,经过编码之后的数据以串行的方式输出,二者均需要时钟信号来保证数据的可靠性。clk1作为输入的并行数据的时钟,5B/6B编码模块的时钟为clk2,3B/4B编码模块的时钟为clk3。而3个编码模块产生的时钟信号需要根据输入的时钟信号产生clk,其中串行数据的输出依靠的也是时钟信号clk。而完成1组的数据运算需要的时钟个数为12个,这样可以保证数据的运行速度。
首先上电复位进入到默认状态,即clk1为1,clk2、clk3为0的状态。其中利用变量cnt完成计数功能,计数到10变为clk1=0、clk1=1、clk2=0,待到下1个时钟周期到来,变量则变为clk1=0、clk2=0、clk3=1。之后等下1个时钟周期上升沿到来时,所有变量恢复默认状态,工作时钟模块程序流程图如图6所示。
图6 工作时钟产生模块程序流程图
3.1.3 8B/10B编码设计
在编写编码模块的代码时,利用软件中的IP核将4组输入8 bit数据组成1组32位的数据,之后将新组成的32 bit的数据视作1个大的整体,1个大的整体包括4个小的整体,8 bit数据组成1个小的整体,这4个小整体依次为Din[7∶0]、Din[15∶8]、Din[23∶16]、Din[31∶24],之后在同1个工作时钟信号clk下,根据正负编码列表的情况,将4组数据送入编码模块进行编码处理,每1个小的整体会得到2个10 bit数据和2个极性值,4组数据经过编码模块处理之后得到8组10 bit数据和极性值,再将二者送入均衡检测控制模块进行处理。根据极性均衡准则得出4组10 bit数据Dout[9∶0]、Dout[19∶10]、Dout[29∶20]、Dout[39∶30],最后将4组10 bit数据通过IP核连续发出。其中从D11和D12中选出Dout[9∶0],在D21和D22中选出Dout[19∶10],在D31和D32中选出Dout[29∶20],在D41和D42中选出Dout[39∶30]。编码部分的系统框图如图7所示。
图7 编码设计图
3.1.4 8B/10B编码模块设计
对于输入的8 bit数据Datan来说,其中变量n为1、2、3、4,分别对应的是Din[7∶0]、Din[15∶8]、Din[23∶16]、Din[31∶24]。在对于输入数据的正负列表编码时,第一步判断是否为控制码。判断完毕之后,若为控制码,要按照控制码的既定映射关系来完成编码。反之输入的数据就是数据码,根据3B/4B、5B/6B的编码原则进行编码处理。之后按照极性判断电路的特点,将由其他模块输入的RD1与RD2进行相加,将加完后得到的RDn值进行输出。程序框图如图8所示。
图8 编码模块程序框图
3.2.1 8B/10B解码原理
将接收到的数据进行串并转换,将转换之后得到的10 bit数据按照真值表映射成相应的8 bit数据,也就是将原始信息提取出来的过程。编码的映射关系可能是一对一也有可能是多对一,而解码的映射关系与之不同,解码是一一对应的,映射关系也是唯一的。因此解码与编码相比就相对容易[14]。
但在数据传输的过程当中,由于趋肤效应和码间干扰的影响,传输过程中会产生误码,以至于通信效率降低,因此要在解码电路中增加纠错步骤来降低误码率[15]。
3.2.2 8B/10B解码设计
解码采用的映射关系为多对一的关系,分别通过对编码模块的2部分进行6B/5B和4B/3B解码来实现。将接收到的4组位宽为10的数据经过IP核进行转换,转换后的数据进行组合,组合成一组位宽为40的数据,将组合之后的数据依次通过检测模块、解码模块以及违规检测模块之后输出数据[16]。解码系统框图如图9所示。
图9 解码设计图
其中控制字符编码检测模块的功能是用于对收到的数据字符进行检查,判断是否为控制码,如果接收到的字符是控制码,那么对应的kin就为1,否则kin赋值为0,即收到的数据字符是数据码。在解码模块中,对收到的4组数据进行解码,按照编解码映射关系完成解码,通过对4组数据的不均衡性检测分别获得4组数据的RD值。违规检测模块的作用是通过对比相邻两组位宽为8的数据与RD值,判断得出数据在传输过程中是否出现了错误数据,如果完全正确,则将正确数据输出,否则将数据删除。8B/10B解码部分程序框图如图10所示。
图10 8B/10B解码程序流程图
首先利用软件平台去对8B/10B的程序代码进行仿真,验证其正确性。编码系统代码如图11所示。解码系统代码仿真如图12所示。
图11 编码程序仿真图
图12 解码程序仿真图
验证远距离传输系统的数据可靠性时,采用上位机、综合测试台和存储器搭建完整的闭环测试系统,运用双绞线作为传输介质来传输LVDS信号。在测试过程当中,利用上位机将脉冲激励作为干扰注入到数据当中,采用的数据帧格式如图13所示。其中数据的帧包头部分是“96 14 6F 14 6F”,包计数部分为“00 00 00 00~00 00 00 09”,数据是递增数为00~59。
图13 数据帧格式
在上位机上完成8B/10B编码解码程序的编写,再烧录到FPGA当中,之后通过FPGA程序内容的改写来控制LVDS串行数据的传输速率,通过LVDS的传输距离由传输介质长度来控制,分别进行误码测试,结果见表1和表2。
表1 240 m双绞线测试结果
表2 500 Mbit/s传输速度测试结果
根据实验测试的误码率测试结果可以知道,经过对比,如果在软件逻辑中不采用8B/10B编解码模块,硬件电路可以保证数据在240 m长度的双绞线中以100 Mbit/s的速度无误码率进行传播,在60 m长度的双绞线中以500 Mbit/s的速度无误码率。而在软件逻辑中加入8B/10B编解码模块,可以保证在240 m的传输距离上以500 Mbit/s的速度进行无误码率的方式传播,可以做到同时满足远距离高速率传输也可以同时满足以极低的误码率方式进行传输。
针对数据在高速远距离传输中可靠性无法满足传输需求的问题,本文在硬件电路中加入经过预加重和去加重处理的均衡器和驱动器,采用LVDS方式进行传输,在软件逻辑中设计了8B/10B编解码的优化方法,可以提高数据信息在传输介质中高速并且远距离传输的可靠性。通过大量的实验测试,LVDS数据经过8B/10B编解码之后,可以满足数据在传输介质传输时具备高速、误码率低的特点,满足实验的测试要求。