一种用于pcie数据链路层高性能容错的方法
【专利摘要】本发明涉及一种用于PCIE数据链路层高性能容错的方法,在PCIE原有的CRC检错基础上,加入错误检测和纠正(ECC,Error?Checking?and?Correcting)码实时纠错和自修复功能,在检出错误的同时能够对其进行纠正,并且计算速度很快。本发明能够纠正的错包就不需要重发,增加链路的容错性,同时可以节省带宽和时间,提高链路传输的效率。
【专利说明】一种用于PCIE数据链路层高性能容错的方法
【技术领域】
[0001]本发明涉及一种用于PCIE数据链路层高性能容错的方法。
【背景技术】
[0002]PCIE是用于互连诸如计算和通信平台应用中外围设备的第三代高性能I/O总线。数据链路层位于PCIE主控核的中间层,主要功能是链路管理和保证数据的传输的可靠性和完整性。数据链路层使用容错和重传机制保证数据传送的完整性和一致性。目前PCIE数据链路层的容错性很低,只能检错,不能纠错。根据目前PCIE的研究现状得知,为了降低数据在数据链路中传输的误码率,PCIE运用循环冗余校验CRC进行检错,CRC是一种在数据通信中应用很广泛的差错控制编码,具有较强的检错能力。下面详细介绍CRC在数据链路层的检错过程。
[0003]数据链路层的发送端接收来自事务层的数据TLP,在发送TLP之前,先将TLP进行封装,加上序列号前缀和CRC后缀,CRC后缀是根据TLP数据包的内容,运用CRC算法生成的校验码。将封装好的TLP副本存放在重发缓冲区中,同时将该TLP发送出去。数据链路层的接收端从物理层接收TLP,此时该TLP中含有序列号前缀和CRC后缀,接收到TLP后,根据TLP数据包中除CRC字段以外的数据,用跟发送端同样的CRC算法,计算得到期望CRC值,将期望CRC值跟TLP携带的CRC进行比较,若匹配,则说明CRC校验正确,继续进行其他的检查。若不匹配,CRC校验错误,说明数据传输过程中发生链路错误,则向发送端回复NAK数据链路层数据包(DLLP),发送端对收到的NAK DLLP所对应的全部TLP,都会进行重发操作,以保证每个TLP数据包能够传输正确。
[0004]PCIE数据链路层的现有容错技术仅能够检查数据在链路传输过程中发生的错误,但不能对其纠正。同时,由于不能纠错,所有发生链路传输错误的数据包都要重发,不仅增加了链路传输的负担,也降低了数据传输的效率,造成带宽和时间的浪费。
【发明内容】
[0005]本发明的目的在于克服上述不足,提供一种用于PCIE数据链路层高性能容错的方法,能够增加链路的容错性,同时可以节省带宽和时间,提高链路传输的效率。
[0006]本发明的目的是这样实现的:一种用于PCIE数据链路层高性能容错的方法,在PCIE原有的CRC检错基础上,加入ECC实时纠错和自修复功能,在检出错误的同时能够对其进行纠正,并且计算速度很快。
[0007]其进一步的技术方案为:具体步骤如下:
1)在数据链路层发送端加上ECC编码电路,编码电路负责编码,生成TLP数据包的初始的ECC校验码;
2)在接收端电路结构中加入ECC解码电路,解码电路负责生成新的ECC校验码,并将新的ECC校验码与数据所携带的初始的ECC校验码进行异或检错和纠错;
3)当解码电路检测到错误但是不能对其纠正(超过编码算法的纠错范围)时,会生成一个错误发生标识信号,以表明有不可纠正的错误产生,则根据ACK/NAK协议对不可纠正的错包进行重发;
4)在数据链路层发送端接收来自事务层的TLP数据包后,根据协议内容进行封装,在现有容错技术(加入CRC冗余循环校验码)的基础上,本发明由ECC编码电路生成ECC校验码,等完整的TLP接收完毕后将ECC校验码加在数据包的包尾;
5)在数据链路层的接收端,接收来自物理层的TLP数据,对收到的TLP数据包进行检错,先进行CRC校验,若CRC校验无误,则说明无链路传输错误,则不需要进行ECC纠错。若CRC校验错误,则进行ECC纠错。目前常用的ECC编码是汉明码,可以纠错一位,检错2位,若有多位错误为,不可纠正的,则给出错误标识信号,以便通知发送端对出错的TLP进行重发。
[0008]所述ECC校验纠错是基于汉明编解码方法,每512字节的数据块将生成3个字节长度的ECC校验码。
[0009]与现有技术相比,本发明的有益效果是:
本发明提高了 PCIE数据链路的容错性能,能够实现纠错功能,通过在现有的数据链路的容错技术基础上,加入ECC实时纠错和自修复功能,使得原来只能检错,不能纠错的容错系统,能够实现纠错功能,从而增强链路的容错性。
【专利附图】
【附图说明】
[0010]图1是本发明数据链路层ECC容错技术框架图。
[0011]图2是本发明数据链路层发送端的ECC编码电路。
[0012]图3是本发明ECC奇偶校验信息生成表。
[0013]图4是本发明数据链路层接收端的ECC解码电路。
[0014]图5是本发明ECC校验流程图。
【具体实施方式】
[0015]本发明一种用于PCIE数据链路层高性能容错的方法,所述方法包括以下步骤:
1)在数据链路层发送端加上ECC编码电路,编码电路负责编码,生成TLP数据包的初始的ECC校验码。在接收端电路结构中加入ECC解码电路,解码电路负责生成新的ECC校验码,并将新的ECC校验码与数据所携带的初始的ECC校验码进行异或检错和纠错。当解码电路检测到错误但是不能对其纠正(超过编码算法的纠错范围)时,会生成一个错误发生标识信号,以表明有不可纠正的错误产生,则根据ACK/NAK协议对不可纠正的错包进行重发。方案总体框架图见附图1 ;
2)在发送端加入ECC编码电路,生成ECC校验码。输入数据的ECC编码电路模块的主要作用是在数据发送到物理层之前对数据进行ECC编码,将生成的ECC纠错码加到TLP数据包中。来自事务层的TLP数据包长度不定,以双字为单位,最小长度是4个双字。从事务层接收到的TLP缓存到FIFO中,等到一个完整的TLP数据包接收完毕后,不仅要根据协议中规定的在TLP中加序列号和CRC校验码,还要对TLP进一步封装,在TLP的包尾加入ECC校验码,ECC校验码是ECC编码电路会根据固定算法生成。将封装好的TLP副本存入重发缓冲区中以备需要时重发。在将封装好的TLP发送之前首先判断,有没有收到来自对端的对应上一个TLP数据包的重发标志信号,如果没有,则可以将封装好的TLP发送至下层,如果需要重发,则阻止继续接收来自事务层的TLP,并优先重发。具体流程见如附图2:
本发明中ECC编码采用汉明检纠错技术。下面以对512字节数据为例进行汉明编码,生成3字节的检纠错码。
[0016]2a) ECC校验码的生成:本方案所采用的ECC校验算法是基于汉明编解码方法,每512字节的数据块将生成3个字节长度的ECC校验码。512字节的原始数据组成一个大小为512x8的矩阵。对原始数据按行以字节为单位进行计算产生行校验码,按列以位为单位进行计算产生列校验码。其组成成分为6位的列奇偶校验码和18位的行奇偶校验码。ECC校验码的生成如附图3所示:其中Pl~P4是列奇偶校验码,P8~P2048为行奇偶校验码。
[0017]Pl = Bit7 ? Bit5 ? Bit3 ? Bitl
PI, = Bit6 ? Bit4 ? Bit2 ? BitO
P2 = Bit7 ? Bit6 ? Bit3 ? Bit2
P2, = Bit5 ? Bit4 ? Bitl ? BitO
P4 = Bit7 ? Bit6 ? Bit5 ? Bit4
P4, = Bit3 ? Bit2 ? Bitl ? BitO
P8 = 512th byte ? 510th byte…4th byte ? 2nd byte
P8, = 511th byte ? 509th byte…3rd byte ? 1st byte
P2048 = 512th byte ? 511th byte…258th byte ? 257th byteP2048’ = 256th byte ? 255th byte…2nd byte ? 1st byte其中,BitO~Bit7是该列所有数据的异或值,1st byte~512th byte是该行所有数据的异或值。
[0018]2b) ECC码的分配:ECC校验码的分配如表1所示,其中pl、4为列校验码,p8~pl024为行校验码。
[0019]表1:ECC校验码的分配表
【权利要求】
1.一种用于PCIE数据链路层高性能容错的方法,其特征在于:在PCIE原有的CRC检错基础上,加入ECC实时纠错和自修复功能,在检出错误的同时能够对其进行纠正,并且提高计算速度。
2.根据权利要求1所述一种用于PCIE数据链路层高性能容错的方法,其特征在于具体步骤如下: 1)在数据链路层的发送端加上ECC编码电路,ECC编码电路负责编码,生成TLP数据包的初始ECC校验码; 2)在上述数据链路层的接收端电路结构中加入ECC解码电路,ECC解码电路负责生成新的ECC校验码,并将新的ECC校验码与数据所携带的初始ECC校验码进行异或检错和纠错; 3)当ECC解码电路检测到错误但是不能对其纠正时,会生成一个错误发生标识信号,以表明有不可纠正的错误产生,则根据ACK/NAK协议对不可纠正的错包进行重发; 4)在数据链路层的发送端接收来自事务层的TLP数据包后,根据协议内容进行封装,在现有容错技术的基础上,由ECC编码电路生成ECC校验码,等完整的TLP接收完毕后将ECC校验码加在数据包的包尾; 5)在数据链路层的接收端接收来自物理层的TLP数据包,对收到的TLP数据包进行检错,先进行CRC校验,若CRC校验无误,则说明无链路传输错误,则不需要进行ECC纠错,若CRC校验错误,则进行ECC纠错。
3.根据权利要求2所述一种用于PCIE数据链路层高性能容错的方法,其特征在于:所述ECC校验纠错是基于汉明编解码方法,每512字节的数据块将生成3个字节长度的ECC校验码。
【文档编号】H04L29/08GK103533045SQ201310473374
【公开日】2014年1月22日 申请日期:2013年10月12日 优先权日:2013年10月12日
【发明者】林谷, 丁燕, 李冰, 丁贤根 申请人:江苏华丽网络工程有限公司