一种用于128位并行数据的crc校验矩阵生成方法
【技术领域】
[0001] 本发明属于可靠性编解码领域,涉及一种并行数据的CRC校验矩阵生成方法,具 体涉及一种用于128位并行数据的CRC校验矩阵生成方法。
【背景技术】
[0002] 为保证数据通信的可靠性,通常在数据传输中采用CRC编码对被传输数据进行校 验。目前实现CRC编码方式多样,有串行编码方式、查表法和公式法(也称推导法)等。
[0003] 串行编码实现方式简单硬件消耗很小,但是由于只能串行处理数据,数据传输速 率非常低。查表法需要存储模块来存储表项,其硬件消耗大,并且难以实现高位宽的并行数 据处理。公式法目前在以太网和PCIe等高速并行通信中广泛应用,但其迭代推导方式对于 高位宽数据(大于16)来讲,推导比较复杂,因此一般采用基于公式法的级联结构解决并行 宽位数据的CRC编码(即采用多个窄位CRC编码结构级联实现并行宽位数据的CRC编码, 如采用多个面向8位数据编码的CRC模块,通过级联实现对64并行数据的CRC编码),级联 结构在对宽位并行数据(如128位)进行编解码时延时较大,无法满足实际的应用需求。
[0004] 当前,PCIe 3. 0(8GT/s)在物理层中使用128b/130b编码方式以实现负载均衡,在 单周期内实现对128位并行数据的CRC校验是保证高速串行通信效率的前提。串行编码、 查表法、公式法及基于公式法的级联结构均无法高效率的实现对128并行数据的CRC编解 码。
【发明内容】
[0005] 针对现有技术中存在的问题,本发明提供一种用于128位并行数据的CRC编解码, 减少了级联结构带来的链路延迟,实现高速串行通信中接收或发送数据的实时校验,用于 128位并行数据的CRC校验矩阵的生成方法。
[0006] 本发明是通过以下技术方案来实现:
[0007] -种用于128位并行数据的CRC校验矩阵生成方法,其特征在于,包括如下步骤,
[0008] 1)根据串行编码CRC的编解码原理,得到当前CRC值与当前数据输入和前一级 CRC值的关系;
[0009] 2)根据当前CRC值与当前数据输入和前一级CRC值的关系,通过迭代得到8位并 行数据输入的当前CRC值与前一级CRC值和当前8位并行数据输入的关系;
[0010] 3)根据步骤2)中得到的CRC前后关系,提取出32x32的前一级CRC参数矩阵和 8x32的当前数据输入参数矩阵;
[0011] 4)根据步骤3)中的参数矩阵,得到8位并行数据输入的当前CRC值与前一级CRC 值和当前8位并行数据输入的相应表达式,对该表达式进行四次迭代运算后,得到输入32 数据后的CRC值及其对应的表达式;
[0012] 5)从输入32数据后的CRC值的表达式中提取出前一级CRC值和当前32为数据输 入的参数矩阵;将该参数矩阵中的奇数变为1,偶数变为〇,得到32位并行的当前CRC值与 前一级CRC值和当前32位并行数据输入的关系表达式;
[0013] 6)对步骤5)中得到的关系表达式按照步骤4)和5)的方法进行四次迭代,得到 128并行数据的当前CRC值与前一级CRC值和当前128位数据输入的关系矩阵;
[0014] 7)将步骤6)得到的关系矩阵用于128并行数据编码的实时校验。
[0015] 优选的,步骤1)中,当前CRC值与当前数据输入和前一级CRC值的关系为,
[0017] 其中,为第j+Ι次数据输入后的第i+Ι位CRC值,^为第j次数据输入后的 第i位CRC值,g1+1为CRC生成多项式中第i+Ι位的系数,d j+1为第j+Ι次的数据输入,遂 为第j次数据输入后的第31位CRC值,j为自然数,i = 0, 1. .. 31。
[0018] 进一步,步骤2中,8位并行数据输入的当前CRC值与前一级CRC值和当前8位并 行数据输入的关系为,
[0020] 其中,碌为当前CRC值的第i位,cf为前一级CRC值的第i位(i = 0, 1··· 31,j = 0, I. . . 7),4为当前的数据输入的第j位;\和y j为该关系中cf和4的参数,由IEEE802. 3 中的CRC-32生成多项式决定。
[0021] 再进一步,步骤3)中提取参数矩阵时,
[0022] 设由步骤2)得到的8位并行数据输入的当前CRC值为
[0024] 将步骤2)包含参数\与y郝C,1带入到列向量〇,其中i = 0, 1...31,j = 〇, 1. . . 7,得到
[0026] 按照上式对应关系提取出参数\和y ,,得到一个32x40的矩阵⑶4(]X32T,转置后得 到40x32的矩阵OT 4idx32,将⑶4(]Χ32按照X JP y j分割开,得到两个分别关于前一级CRC值 €°?1,(4~4]和当前数据输入值,0|二[?...01!,]的参数矩阵02(: 32><32和02(:8><32。
[0027] 再进一步,步骤4)中,得到8位并行数据输入的当前CRC值与前一级CRC值和当 前8位并行数据输入的相应表达式为,
[0029] 根据表达式中C1、(:°和D 1之间的关系,得到输入两次8位数据,即输入16位并行 数据后的当前CRC值为,
[0031] 采用同样处理,继续迭代两次后得到输入四次8位数据,即输入32位并行数据后 的CRC值为,
[0033] 将异或关系转换为数学中相加,可得到(:4与C °以及D \ D2、D3、D4的关系为,
[0035] 其中,C°为前一级的CRC值,
[0036] D1、D2、D3、D4分别为第一、二、三、四次输入的8位数据,
[0041] D2CSX3AD4 的参数矩阵。
[0042] 再进一步,步骤5)中,根据步骤4)中C4表达式,令C °的参数矩阵为C2Cfx32,D1 的参数矩阵为F8U,. D2的参数矩阵为.校32,D3的参数矩阵为拉32,D 4的参数矩阵为、,则
[0044] 对C2C3322x32、咬32、if32、i^、% 32进行计算,将得到的矩阵中奇数变成1,偶 数变成〇 ; D2C^32为关于当前32位并行数据的参数矩阵;
[0046] 得到32位并行的当前CRC值与前一级CRC值和当前32位并行数据输入的关系
其中 D32= [D1?,D4]。
[0047] 再进一步,步骤6)中,将关系表达式,
[0049] 按照步骤4)和步骤5)的方法迭代计算最终得到128并行数据的当前CRC值C128 与前一级CRC值C°和当前128位数据输入的关系为,
[0051] 其中,为关于C°的参数矩阵,D2CH2为关于D128的参数矩阵。与现有技 术相比,本发明具有以下有益的技术效果:
[0052] 本发明所述的一种用于128位并行数据校验矩阵生成方法,该方法提供了直接对 128并行数据进行CRC编解码的校验矩阵,从而避免使用延时较大的级联结构,提高了 128 位并行数据的CRC编解码效率,实现高速串行通信中接收或发送数据的实时校验。基于该 校验矩阵的CRC电路可以用于PCIe 3. 0物理层中的128位并行数据的实时CRC校验,保证 了数据的高效率传输。
【附图说明】
[0053] 图1为本发明的校验矩阵生成方法流程图。
【具体实施方式】
[0054] 下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而 不是限定。
[0055] 本发明的目的在于通过使用校验矩阵对128位并行数据直接进行CRC编解码,避 免使用级联结构的CRC编解码方法,从而提高128位并行数据的CRC编解码效率。
[0056] 本发明所述的用于128位并行数据的CRC校验矩阵生成方法包括如下步骤:
[0057] 1)根据串行编码CRC的编解码原理,可知当前CRC值与当前数据输入和前一级 CRC值的关系为
为第j+Ι次数据输入后的第i+Ι位 CRC值,为第j次数据输入后的第i位CRC值,g1+1为CRC生成多项式中第i+Ι位的系 数,d]+1为第j+Ι次的数据输入,4为第j次数据输入后的第31位CRC值,j为自然数,i = 0, 1. · · 31) 〇
[0058] 根据 IEEE802. 3 中的 CRC-32 所规定的 CRC-32 生成多项式 G(x) = x32+x26+x23+x22 +x16+x12+xn+x10+xs+x 7+x5+x4+x2+x+lj gi对应值 g3i= 0, g3〇= 0."g〇= Io
[0059] 2)由步骤I)的迭代关系可推导出8位并行数据输入的 当前CRC值与前一级CRC值和当前8位并行数据输入的关系为
,其中4为当前CRC值的第i位, cf为前一级CRC值的第i位(i =0, 1... 31,j =0, 1...7),?ζ为当前的数据输入的第j位
的参数,由IEEE802. 3中的CRC-32生成多项式决定)。
[0060] 由步骤1)所述关系式迭代得到的8位并行数据输入的当前CRC值与前一级CRC 值和当前8