基于CRC校验的高速长线LVDS传输设计

2015-02-28 17:38李辉景王淑琴任勇峰甄国涌焦新泉中北大学仪器科学与动态测试教育部重点实验室电子测试技术重点实验室太原030051
电子器件 2015年6期
关键词:校验码重传传输速率

李辉景,王淑琴,任勇峰,甄国涌,焦新泉(中北大学仪器科学与动态测试教育部重点实验室,电子测试技术重点实验室,太原 030051)

随着电子信息技术飞速发展,数据传输在传输速率、传输距离及误码率上有了更高的要求,现今工业化的应用也越来越追求数据在远距离传输、信道容量及数据准确性三方面的均衡[1]。长距离传输时,并行方式所需成本高、布线复杂、可靠性低,所以一般采用串行传输。传统串行传输技术如RS-232、RS-422、RS-485等,其数据传输速率都较低,最大不超过10 Mbit/s,无法满足高速数据传输的需求[2]。LVDS技术采用极低的电压摆幅高速差动传输数据,具有低功耗、低误码率、低串扰和低辐射等特点,理论传输速率最高可达1.923 Gbit/s,使得其在高速数据传输系统中得到广泛的应用,但是,LVDS信号本身只能满足短距离传输,不支持远距离传输。

本文设计中,为实现以120 Mbit/s速率在40 m电缆高速回收弹上数据,在弹上采编设备与地面测试设备之间采用LVDS技术,并通过硬件电路对LVDS接口增加发送驱动器及接收均衡器,补偿长线传输带来的信号衰减,同时,在逻辑设计上,引入反馈纠错机制,解决LVDS信号只适合短距离传输的缺点,使数据在高速远距离传输过程中可靠性得到保证。

1 总体设计方案

系统总体设计如图1所示,由弹上采编设备、地面测试设备和计算机3部分构成。弹上采编设备采集弹上数据并存储;地面测试设备转发计算机指令,并回收弹上数据;计算机控制指令的发送及数据回收处理。

系统采用高速LVDS接口实现数据的高速传输,在数据发送端(弹上采编设备),使用SN65LV1023A串化器,将FPGA并行数据转化为串行数据输出,为延长LVDS信号的传输距离,在电缆发送端增加CLC001AJE高速驱动器,增强信号驱动能力,同时在电缆接收端(地面测试设备)采用CLC014AJE自适应均衡器,补偿信号在长距离传输过程中出现的衰减,恢复其原有性能,再通过SN65LV1224BDBR解串器,将串行数据转化为并行数据,经USB数据接口传输至计算机软件对数据进行分析和处理。

图1 系统总体框图

2 硬件电路设计

2.1 发送端高速驱动器设计

电缆和PCB损耗会使高频信号边沿变化速率降低,引入码间串扰,导致高频长距离传输时信号的损耗衰减。SN65LV1023A输出差分信号压差约200 mV,传输距离仅10 m左右[3],无法满足长线传输的需求。CLC001AJE芯片数据传输速率可达622 Mbit/s,100 mV差分输入门限电压,通过调节外部电阻,输出电压压差1.6 V~2 V。因此,在信号发送端采用驱动芯片,将信号压差提升至2 V,延长信号传输距离。

值得注意的是,CLC001AJE输入端需端接100 Ω电阻,匹配SN65LV1023A输出线上阻抗(端接电阻需靠近CLC001AJE输入端放置),并保证输入端共模电压在0.1 V~2.3 V之间,具体电路设计如图2所示。

图2 LVDS高速驱动器电路设计

2.2 接收端自适应均衡器设计

LVDS信号通过传输线会产生损耗,损耗与信号频率的平方根成正比。为了使信号能被接收端可靠的接收,需在接收端补偿信号衰减。CLC014AJE是美国半导体公司的一款自适应均衡器,针对50 Mbit/s~650 Mbit/s信号,可自动补偿其在300 m Belden 8281或120 m 5类非屏蔽双绞线上衰减[4~5],且具有极低的抖动和功耗。电路设计时,信号输入共模电压保持3.4 V,同时端接100 Ω电阻,匹配传输线上阻抗;在ACE+、ACE-之间,串接50 pF~1 μF电容,控制均衡环路的环路响应;输出信号进入LVDS解串器前,还需进行阻抗匹配和输入电平控制,具体电路设计如图3所示。

图3 LVDS自适应均衡器电路设计

3 软件设计

3.1 LVDS传输机制

本文设计中,采用通信技术中常用反馈纠错传输方式,也称自动请求重发(ARQ),实现数据的可靠传输。LVDS发送方数据包以1 K为单位,并采用循环冗余校验(CRC)产生32位校验码,附于数据包之后,与数据一同发送至LVDS接收方,接收方接收到数据包n后,做相同的运算,若最终校验结果为0,表明数据包正确,通过422接口发送确认通知,若结果不为0,则判断数据传输出现误码,通过422接口发送错误通知,要求发送方重传错误数据包n,同时丢弃原有数据包n。然而若发送方每发送一包数据后,均等待422的反馈通知,再发送下一包数据,必然导致数据平均传输速率严重下降。

为使数据的反馈纠错机制以最低的带宽损耗,达到数据的高可靠性,本设计中改进AQR工作方式,采用如图4所示的方式传输。

图4 LVDS数据包ARQ传输实现过程

数据发送方发送数据包n后,紧接着开始发送数据包n+1,当发送第200个数据时(根据422通知的delay时间确定),检测数据包n反馈通知(此时接收方发送的数据包n反馈通知已到达),若是错误通知,则重传数据包n,若非错误通知,则继续发送数据包n+1。为避免错误数据包一直重传,出现“死机”现象,设置错误重传计数器,数据包重传次数达到3次后,接收方不再发送错误通知,存储错误数据包,等待接收下一包数据。采用此种传输方式,只在数据包出现误码时,影响数据传输速率,故针对错误数据包出现概率低情况,可以最低带宽损耗,达到数据传输高效、高可靠性。

3.2LVDS发送方FPGA设计

LVDS数据发送方FPGA控制如图5所示,flash_ctr模块操作Flash读取1 024 byte数据,并行写入缓存A(或B)、CRC校验模块中,同时将1 024 byte数据产生的CRC校验码,与数据一并写入缓存A(或B)中,缓存A、B以ping-pong的方式,交替缓存1 024 byte数据与其相应的校验码。采用交替缓存的方式,可以确保数据发送前CRC校验码已写入缓存中,消除校验码写入带来的延迟,提高数据发送速率,每完成一次缓存A(或B)写入,将write_count加 1。

lvds_ctr模块实现对外部LVDS接口控制,将数据在时钟的上升沿送至数据接口,发送时,lvds_ctr模块以同样ping-pong的方式交替从缓存A、B中读取数据并传输,发送完缓存A中数据后(包括1 024 byte有效数据和32bit CRC校验码),紧接着发送缓存B中数据,当发送第200个数据时,检测422_ctr模块的Error Flag,此时Error Flag表示缓存A中数据是否发送成功,若为1,则继续发送缓存B数据,并将read_count加1;若为0,则停止发送缓存B数据,重新发送缓存A中数据。lvds_ctr模块以此方式交替发送缓存A、B中数据,并在发送第200个数据时,判断上一次数据传输是否成功。

图5 LVDS数据发送方逻辑设计

flash_ctr模块和lvds_ctr模块通过write_count、read_count实现对缓存A、B读写的相互制约,仅当write_count-read_count<2 时,允许 flash_ctr模块向缓存A或B中写入数据,保证缓存中数据未成功发送前不被新数据覆盖;仅当write_countread_count>0时,允许lvds_ctr模块发送缓存A或B中数据,保证相同数据不被多次成功发送。

3.3LVDS接收方FPGA设计

LVDS数据接收方FPGA控制如图6所示,lvds_ctr模块控制外部LVDS接口接收数据,由于接口同步原因,线路需连续传输数据,发送方以10位数据的高两位来区分无效数、数据包和相邻数据包,lvds_ctr模块在时钟上升沿接收1 byte有效数据,并将数据并行写入缓存A(或B)、CRC校验模块中。数据发送端每包数据包括1 024 byte和32位CRC校验码,lvds_ctr模块只将1 024 byte有效数据写入缓存A(或B),而把整包数据写入CRC校验模块中,校验完成后,判断传输是否产生误码,若有误码产生,则清除缓存A(或B)中数据,并停止接收数据,同时将Error Flag置0,等待发送方重传数据(以10位数据高两位判断重传数据的开始位置);若没有误码产生,则继续接收当前数据,并将当前数据包写入缓存B(或A)和CRC校验模块中,重复以上操作,如此交替将有效数据写入缓存A、B中,并在每次校验成功后,将 write_count加 1。

图6 LVDS数据接收方逻辑设计

422_ctr模块根据Error Flag和Error Count决定422应答内容,若Error Flag为0,且Error Count<3,则发送错误通知;若Error Flag为1,则发送确认通知。usb_ctr模块控制交替读取缓存A、B中数据,并发送至USB接口,每完成一次缓存A或B读取,将read_count加1。

lvds_ctr模块和usb_ctr模块与发送方一样通过write_count、read_count实现对缓存 A、B读写的相互制约,仅当 write_count-read_count<2时,允许lvds_ctr模块向缓存A或B中写入数据,保证缓存中数据未读取前不被新数据覆盖;仅当write_count-read_count>0时,允许usb_ctr模块发送缓存A或B中数据,确保读取数据为成功传输的有效数据。

3.4 CRC32校验

3.4.1 CRC校验原理

对于待发送的k比特数据D={d0,d1,…,dk-1},采用系数为0或1的多项式D(χ)=d0·χk-1+d1·χk-2+…+dk-1·χ0表示,发送方要把数据D发送给接收方前,通信双方约定一个r+1位二进制序列,采用多项式表示为G(χ),发送方将数据D扩展r位后得到多项式D′(χ),使D′(χ)与G(χ)做模2除法运算,得到余数多项式R(χ),构成r位的监督码,附在k比特数据之后,构成k+r位新数据D″发送至接收方,接收方接收到数据D″后,采用相同的算法,与事先约定好的多项式G(χ)做模2除法运算,若得到余数R为非0数据,则接收方知道发生了错误,否则数据认为正确而被接收。CRC编码的检错能力与生成多项式G(χ)密切相关,有效的G(χ)可使CRC编码的漏检率非常低[6],本文设计中选用CRC-32实现数据的差错编码。

3.4.2 基于单字节的CRC-32查找表实现

根据CRC校验原理,模2除法运算的实质是反复移入低位,消除高位。逐位运算效率太低,不适合大量数据计算,而查找表法,通过索引查找表,一次可处理多位数据,效率高,有利于大量数据计算[7]。本设计中,采用的8 bit查找表实现CRC校验,每次处理1 byte数据,根据异或运算的交换律,(A XOR B)XOR C=A XOR(B XOR C),数据可以先与刚从寄存器移除的字节相异或,通过8 bit的反复移位和CRC除法,得到CRC余式表索引值,根据索引值进行查表,再用表值异或寄存器,得到的即为CRC校验码[8],1 024 byte校验具体过程如下:

(1)复位CRC校验模块,将32位校验码寄存器初值设置为0;

(2)将待校验数据8位数据与CRC寄存器高8位异或,得到查找表索引值,并将查表所得值与CRC当前寄存器值相异或,循环计算1 024次,最终产生4byte的CRC校验码;

(3)将校验完成标志置1,表示校验完成。

LVDS发送端计算1 024 byte数据校验码,并将最终校验码附于数据包之后传输,接收端接收1028 byte数据,做相同运算,产生4 byte CRC校验码,判断结果是否为0,若为0,则数据无误码,若不为0,则存在误码,需重新传输,Verilog实现关键代码如下:

4 实验验证与分析

采用4段10 m的屏蔽双绞线,串接成一条40 m传输线,连接弹上采编器及地面测试台LVDS接口,通过上位机软件,向弹上采编器发送读数指令,回收弹上数据。更改程序,调整LVDS数据速率为100 Mbit/s 、200 Mbit/s、300 Mbit/s、400 Mbit/s、500 Mbit/s,分别对其加入反馈纠错机制前后实际传输速率及误码率进行测试,测试结果如表1所示。

表1 测试结果表

从测试结果可得出结论:传输速率100 Mbit/s以下,硬件电路能保证数据传输的可靠性;传输速率大于100 Mbit/s时,误码率随传输速率的增大而增加,在逻辑设计上,加入CRC校验算法,能有效保证数据传输可靠性的,但会导致实际传输速率下降;当传输速率大于500 Mbit/s时,由于错误重传计数器的制约,数据无法可靠传输,同时实际传输速率下降。

5 结束语

文中针对LVDS高速长线传输存在数据传输可靠性降低的问题,从硬件电路设计上,对LVDS信号做预处理和补偿,同时在逻辑设计上引入反馈纠错机制,采用CRC算法,在很大程度上保证了数据传输的可靠性,经过试验验证,数据以400 Mbit/s速率,在大于40 m的传输线上,实现零误码可靠传输。

[1]易敏,苏淑靖.基于LVDS的高可靠性数据传输设计[J].微电子学与计算机,2014,31(9):131-134.

[2]郭宝锋,韩壮志,何强.基于FPGA的高速数据长线传输系统的设计[J].测控技术,2012,31(5):85-88.

[3]薛源,刘卫东.一种多通道实时数据采集监控系统设计与实现[J].计算机测量与控制,2011,19(4):863-865.

[4]薛隆全,文丰,张时华.基于LVDS总线的高速长距数据传输的设计[J].电子设计工程,2009,17(2):39-42.

[5]范丹,何永强,方晋贤.高速LVDS接口电路设计[J].仪表技术,2010(4):7-12.

[6]张焱,任勇峰,齐蕾.基于FPGA的CRC校验算法的实现[J].电子器件,2015,38(1):222-226.

[7]毕占坤,张羿猛,黄芝平.基于逻辑设计的高速CRC并行算法研究及其FPGA实现[J].仪器仪表学报,2007,28(12):2244-2249.

[8]季鹏辉,孟丁,任勇峰.基于FPGA的16 bit CRC校验查表法设计[J].电子器件,2013,36(4):580-584.

李辉景(1982-),男,汉族,福建泉州人,硬件工程师,主要从事动态测试、高速数据采集;

王淑琴(1990-),女,山西临汾人,硕士研究生,主要从事数据采集与存储研究,wangshuqin1117@163.com。

猜你喜欢
校验码重传传输速率
Basic UDI校验码算法
三星利用5G毫米波 实现创纪录传输速率
面向异构网络的多路径数据重传研究∗
跨山通信中频段选择与传输速率的分析
数据传输速率
基于Excel实现书号校验码的验证
一种基于散列邻域搜索网络编码的机会中继重传方法
基于FPGA的循环冗余校验码设计
身份证号码中的数学
MPTCP中一种减缓缓存阻塞的重传策略