公开/公告号CN105099466A
专利类型发明专利
公开/公告日2015-11-25
原文格式PDF
申请/专利权人 中国航天科技集团公司第九研究院第七七一研究所;
申请/专利号CN201510504163.8
申请日2015-08-17
分类号H03M13/09;
代理机构西安通大专利代理有限责任公司;
代理人李宏德
地址 710068 陕西省西安市太白南路198号
入库时间 2023-12-18 12:30:52
法律状态公告日
法律状态信息
法律状态
2018-04-17
授权
授权
2015-12-23
实质审查的生效 IPC(主分类):H03M13/09 申请日:20150817
实质审查的生效
2015-11-25
公开
公开
技术领域
本发明属于可靠性编解码领域,涉及一种并行数据的CRC校验矩阵生 成方法,具体涉及一种用于128位并行数据的CRC校验矩阵生成方法。
背景技术
为保证数据通信的可靠性,通常在数据传输中采用CRC编码对被传输 数据进行校验。目前实现CRC编码方式多样,有串行编码方式、查表法和 公式法(也称推导法)等。
串行编码实现方式简单硬件消耗很小,但是由于只能串行处理数据,数 据传输速率非常低。查表法需要存储模块来存储表项,其硬件消耗大,并且 难以实现高位宽的并行数据处理。公式法目前在以太网和PCIe等高速并行 通信中广泛应用,但其迭代推导方式对于高位宽数据(大于16)来讲,推 导比较复杂,因此一般采用基于公式法的级联结构解决并行宽位数据的 CRC编码(即采用多个窄位CRC编码结构级联实现并行宽位数据的CRC 编码,如采用多个面向8位数据编码的CRC模块,通过级联实现对64并行 数据的CRC编码),级联结构在对宽位并行数据(如128位)进行编解码时 延时较大,无法满足实际的应用需求。
当前,PCIe3.0(8GT/s)在物理层中使用128b/130b编码方式以实现负 载均衡,在单周期内实现对128位并行数据的CRC校验是保证高速串行通 信效率的前提。串行编码、查表法、公式法及基于公式法的级联结构均无法 高效率的实现对128并行数据的CRC编解码。
发明内容
针对现有技术中存在的问题,本发明提供一种用于128位并行数据的 CRC编解码,减少了级联结构带来的链路延迟,实现高速串行通信中接收 或发送数据的实时校验,用于128位并行数据的CRC校验矩阵的生成方法。
本发明是通过以下技术方案来实现:
一种用于128位并行数据的CRC校验矩阵生成方法,其特征在于,包 括如下步骤,
1)根据串行编码CRC的编解码原理,得到当前CRC值与当前数据输 入和前一级CRC值的关系;
2)根据当前CRC值与当前数据输入和前一级CRC值的关系,通过迭 代得到8位并行数据输入的当前CRC值与前一级CRC值和当前8位并行数 据输入的关系;
3)根据步骤2)中得到的CRC前后关系,提取出32x32的前一级CRC 参数矩阵和8x32的当前数据输入参数矩阵;
4)根据步骤3)中的参数矩阵,得到8位并行数据输入的当前CRC值 与前一级CRC值和当前8位并行数据输入的相应表达式,对该表达式进行 四次迭代运算后,得到输入32数据后的CRC值及其对应的表达式;
5)从输入32数据后的CRC值的表达式中提取出前一级CRC值和当前 32为数据输入的参数矩阵;将该参数矩阵中的奇数变为1,偶数变为0,得 到32位并行的当前CRC值与前一级CRC值和当前32位并行数据输入的关 系表达式;
6)对步骤5)中得到的关系表达式按照步骤4)和5)的方法进行四次 迭代,得到128并行数据的当前CRC值与前一级CRC值和当前128位数据 输入的关系矩阵;
7)将步骤6)得到的关系矩阵用于128并行数据编码的实时校验。
优选的,步骤1)中,当前CRC值与当前数据输入和前一级CRC值的 关系为,
其中,为第j+1次数据输入后的第i+1位CRC值,为第j次数据 输入后的第i位CRC值,gi+1为CRC生成多项式中第i+1位的系数,dj+1为第 j+1次的数据输入,为第j次数据输入后的第31位CRC值,j为自然数, i=0,1...31。
进一步,步骤2中,8位并行数据输入的当前CRC值与前一级CRC值 和当前8位并行数据输入的关系为,
其中,为当前CRC值的第i位,为前一级CRC值的第i位 (i=0,1...31,j=0,1...7),为当前的数据输入的第j位;xi和yj为该关系中 和的参数,由IEEE802.3中的CRC-32生成多项式决定。
再进一步,步骤3)中提取参数矩阵时,
设由步骤2)得到的8位并行数据输入的当前CRC值为
将步骤2)包含参数xi与yj的带入到列向量C1T中,其中i=0,1...31, j=0,1...7,得到
按照上式对应关系提取出参数xi和yj,得到一个32x40的矩阵CD40×32T, 转置后得到40x32的矩阵CD40×32,将CD40×32按照xi和yj分割开,得到两个分 别关于前一级CRC值和当前数据输入值的参数 矩阵C2C32×32和D2C8×32。
再进一步,步骤4)中,得到8位并行数据输入的当前CRC值与前一 级CRC值和当前8位并行数据输入的相应表达式为,
根据表达式中C1、C0和D1之间的关系,得到输入两次8位数据,即输 入16位并行数据后的当前CRC值为,
采用同样处理,继续迭代两次后得到输入四次8位数据,即输入32位 并行数据后的CRC值为,
将异或关系转换为数学中相加,可得到C4与C0以及D1、D2、D3、D4的关系为,
C4=C0*C2C32×32*C2C32×32*C2C32×32*C2C32×32+D1*D2C8×32*C2C32×32*C2C32×32*C2C32×32+ D2*D2C8×32*C2C32×32*C2C32×32+D3*D2C8×32*C2C32×32+D4*D2C8×32
其中,C0为前一级的CRC值,
D1、D2、D3、D4分别为第一、二、三、四次输入的8位数据,
C2C32×32*C2C32×32*C2C32×32*C2C32×32为C0的参数矩阵,
D2C8×32*C2C32×32*C2C32×32*C2C32×32为D1的参数矩阵,
D2C8×32*C2C32×32*C2C32×32为D2的参数矩阵,
D2C8×32*C2C32×32为D3的参数矩阵,
D2C8×32为D4的参数矩阵。
再进一步,步骤5)中,根据步骤4)中C4表达式,令C0的参数矩阵 为D1的参数矩阵为D2的参数矩阵为D3的参数矩阵为 D4的参数矩阵为则
对进行计算,将得到的矩阵中奇数变成 1,偶数变成0;为关于当前32位并行数据的参数矩阵;
令
得到32位并行的当前CRC值与前一级CRC值和当前32位并行数据输 入的关系
再进一步,步骤6)中,将关系表达式,
按照步骤4)和步骤5)的方法迭代计算最终得到128并行数据的当前 CRC值C128与前一级CRC值C0和当前128位数据输入的关系为,
其中,为关于C0的参数矩阵,为关于D128的参数矩阵。 与现有技术相比,本发明具有以下有益的技术效果:
本发明所述的一种用于128位并行数据校验矩阵生成方法,该方法提供 了直接对128并行数据进行CRC编解码的校验矩阵,从而避免使用延时较 大的级联结构,提高了128位并行数据的CRC编解码效率,实现高速串行 通信中接收或发送数据的实时校验。基于该校验矩阵的CRC电路可以用于 PCIe3.0物理层中的128位并行数据的实时CRC校验,保证了数据的高效 率传输。
附图说明
图1为本发明的校验矩阵生成方法流程图。
具体实施方式
下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明 的解释而不是限定。
本发明的目的在于通过使用校验矩阵对128位并行数据直接进行CRC 编解码,避免使用级联结构的CRC编解码方法,从而提高128位并行数据 的CRC编解码效率。
本发明所述的用于128位并行数据的CRC校验矩阵生成方法包括如下 步骤:
1)根据串行编码CRC的编解码原理,可知当前CRC值与当前数据输 入和前一级CRC值的关系为(其中为第j+1次数 据输入后的第i+1位CRC值,为第j次数据输入后的第i位CRC值,gi+1为CRC生成多项式中第i+1位的系数,dj+1为第j+1次的数据输入,为第j 次数据输入后的第31位CRC值,j为自然数,i=0,1...31)。
根据IEEE802.3中的CRC-32所规定的CRC-32生成多项式 G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1,知gi对应值 g31=0,g30=0…g0=1。
2)由步骤1)的迭代关系可推导出8位并行数据输入的当前CRC值与 前一级CRC值和当前8位并行数据输入的关系为
由步骤1)所述关系式迭代得到的8位并行数据输入的当前CRC值与 前一级CRC值和当前8位数据输入数值的关系,结果如下:
…
3)设由步骤2)得到的8位并行数据输入的当前CRC值为 则将步骤2)包含参数xi与yj的带入到列向量C1T中,(其中i=0,1...31,j=0,1...7),可得
按照上式对应关系提取出参数xi和yj,得到一个32x40的矩阵CD40×32T, 转置后得到40x32的矩阵CD40×32,将CD40×32按照xi和yj分割开,得到两个分 别关于前一级CRC值和当前数据输入值的参数 矩阵C2C32×32和D2C8×32;
提取得到的矩阵CD40×32为
其中前32行为参数矩阵C2C32×32,后8行为参数矩阵D2C8×32。
4)由步骤3)知,步骤3)中所述的8位并行数据输入的当前CRC值 根据C1、C0和D1之间的关系,可直接得到输入 两次8位数据,即输入16位并行数据后的当前CRC值
表达式中C2C32×32*C2C32×32*C2C32×32*C2C32×32为C0的参数矩阵, D2C8×32*C2C32×32*C2C32×32*C2C32×32为D1的参数矩阵,D2C8×32*C2C32×32*C2C32×32为 D2的参数矩阵,D2C8×32*C2C3×232为D3的参数矩阵,D2C8×32为D4的参数矩 阵。
5)根据步骤4)中C4表达式,令C0的参数矩阵为D1的参数 矩阵为D2的参数矩阵为D3的参数矩阵为D4的参数矩阵为 则
对进行计算,将得到的矩阵中奇数变成 1,偶数变成0。为关于当前32位并行数据的参数矩阵。
令
得到当前CRC值与前一级CRC值和当前32位并行数据的关系
计算结果矩阵为:
将上面的矩阵中奇数变成1,偶数变成0。矩阵化为
计算并将其纵向合并的到32x32的矩阵为
将上面的矩阵中奇数变成1,偶数变成0。矩阵化为
6)将公式按照步骤4)和步骤5)的方法 迭代计算最终得到128并行数据的当前CRC值C128与前一级CRC值C0和当 前128位数据输入的关系,
推导得出校验矩阵为
矩阵为
7)将步骤6)得到的关系矩阵用于128并行数据编码的实时校验。
机译: 用于为l位数据源生成r位并行CRC码的方法和电路
机译: 用于生成CRC码的并行CRC生成电路以及生成该电路的方法
机译: 用于生成具有32位粒度的128位循环冗余校验值的系统和方法