CN115001508A - 一种crc并行计算方法 - Google Patents

一种crc并行计算方法 Download PDF

Info

Publication number
CN115001508A
CN115001508A CN202210599566.5A CN202210599566A CN115001508A CN 115001508 A CN115001508 A CN 115001508A CN 202210599566 A CN202210599566 A CN 202210599566A CN 115001508 A CN115001508 A CN 115001508A
Authority
CN
China
Prior art keywords
crc
state
register
data
matrix
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210599566.5A
Other languages
English (en)
Inventor
孙云刚
于洪涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zuojiang Technology Co ltd
Original Assignee
Beijing Zuojiang Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Zuojiang Technology Co ltd filed Critical Beijing Zuojiang Technology Co ltd
Priority to CN202210599566.5A priority Critical patent/CN115001508A/zh
Publication of CN115001508A publication Critical patent/CN115001508A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

本发明涉及一种CRC并行计算方法,属于数据处理领域。本发明在报文起始word和结束word的非报文字节填充0;将256bit输入数据分为8个lane,每个lane包含32bit;使用LFSR电路进行状态寄存器的递推,得到8个状态寄存器,将状态寄存器进行异或操作后得到合并后状态寄存器,对该合并后状态寄存器的值进行状态回滚,回滚后的状态寄存器即为最终的CRC校验值。本发明通过对状态转移矩阵的拆分降低了CRC状态寄存器关联逻辑的复杂度,提升了电路时序特性;本发明通过状态回滚逻辑消除了大位宽并行时报文尾部冗余0对状态寄存器的影响。

Description

一种CRC并行计算方法
技术领域
本发明属于数据处理领域,具体涉及一种CRC并行计算方法。
背景技术
CRC(cyclic redundancy check)循环冗余校验,是一种常用的数据检错纠错码。其基本编码原理如下。
假设待编码数据为W=[w0,w1,w2,w3....wk-1],共kbit。CRC生成多项式为 G=[g0,g1,g2...gr-1],共rbit。
本文bit位序遵循以太网顺序,即,w0首先传输,在后续推导和计算中对应最高优先级。因此在GF(2)域中W=w(0)xk-1+w(1)xk-2+w(2)xk-3+...+ w(k-1)x0合并后W可表示为
Figure BDA0003669018010000011
类似地生成多项式G在GF(2)域中可表示为
Figure BDA0003669018010000012
在本文中信息序列和生成多项式的位序权重相反。
CRC校验在GF(2)域可表示为如下公式:
R(x)=M(x)xrmodG(x) 公式1
校验码R(x)为信息M(x)补r个0后在GF(2)域中对G(x)取模的结果,最终发送的信息为S(x)=M(x)xr+R(x),在接收端通过计算S(x)modG(x)是否为全0 即可实现错误发现。另外若原始信息长度k为固定值,通过检验S(x)mod G(x) 同样可实现纠错功能。具体纠错能力与生成多项式k长度等相关。
以上可知CRC计算本质上是在GF(2)域求模(除法),在电路层面除法可以通过LFSR进行等效,其电路结构如图1:
以上电路可以实现串行CRC计算,在数据W逐bit移入LFSR后再移入rbit0此时R[0,1,2..r-1]中的数据即为最终的校验码R(x)系数。此电路结构简单,在速度要求比较低的场景下有广泛的应用。
适应不同的应用场景,CRC有多种实现方案。
1.串行法
串行法直接运用CRC定义,逐bit获取输入数据并根据bit值和当前余数值计算GF(2)域的余数直至全部数据参与计算。串行法易于理解,电路简单在低速场合使用较多。但逐bit的计算模式效率较低,无法满足高速计算场合。
2.查表法
查表法利用预先计算的表项可以一次处理多个输入bit,但表项规模为每次处理bit数的幂次规模,如:256规模的表项一次可处理8bit数据、56636规模的表项一次可处理16bit数据。随着处理性能的提高,表项规模会指数级升高。通常此方法采用256规模表项,即每次处理8bit数据。在计算速度要求过高的场合亦不适用。
3.直接并行法
在基于FPGA或ASIC的设计中可以直接以电路逻辑计算替代中的表项存储,实现更大规模的并行。但随着并行规模的增加导致的逻辑复杂度的增加大大限制了电路时钟频率的上限,通常在FPGA中64bit以上的并行计算将面临较大的时序挑战。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种CRC并行计算方法,以解决CRC 的串行法无法满足高速计算场合,查表法在计算速度要求过高的场合亦不适用,直接并行法在并行计算面临较大的时序挑战的问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种CRC并行计算方法,该方法包括:
输入多个word,每个word为256bit数据,将256bit输入数据分为8个lane,每个lane包含32bit,标记为
Dl0[31..0]=W[31..0]
Dl1[31..0]=W[63..32]
Dl2[31..0]=W[95..64]
Dl3[31..0]=W[127..96]
Dl4[31..0]=W[159..128]
Dl5[31..0]=W[191..160]
Dl6[31..0]=W[223..192]
Dl7[31..0]=W[255..224]
各个lane的状态寄存器的递推公式为:
Figure BDA0003669018010000031
其中,k为lane编号范围0,…,7,
Figure BDA0003669018010000032
为r×r的状态转移矩阵,
Figure BDA0003669018010000033
为r×1生成多项式系数矩阵,
Figure BDA0003669018010000034
为r×1寄存器状态矩阵,r为CRC的阶数,n表示第n 拍,Dlk[i]为第k个lane的数据;
Figure BDA0003669018010000035
Figure BDA0003669018010000036
Figure BDA0003669018010000037
其中,E(r-1)为r-1阶单位矩阵,g为多项式系数;
在最后一个word计算完成后,得到8个状态寄存器,将状态寄存器进行异或操作后得到合并后状态寄存器;该合并后状态寄存器的值即为对应输入数据的CRC值。
进一步地,各个lane状态寄存器各个bit最大关联数不超过64。
进一步地,在计算多项式为CRC32时最大关联数为42。
进一步地,
Figure BDA0003669018010000041
表示M的z次幂,对于电路运算来书,表示移位z个bit的状态转移矩阵。
进一步地,状态寄存器的异或操作对应GF2域加法。
进一步地,输入数据为以太网网络报文。
进一步地,在将256bit输入数据分为8个lane之前,还包括:在报文起始word和结束word的非报文字节填充0,并记录结束word填充的0的数量p。
进一步地,将状态寄存器进行异或操作后得到合并后状态寄存器之后还包括:合并后状态寄存器的值为尾部补0的数据对应的CRC值,根据结束word 填充的0的数量p通过公式7进行状态回滚,回滚后的状态寄存器即为最终的 CRC校验值;
其中,
Figure BDA0003669018010000042
Figure BDA0003669018010000044
为r×r矩阵。
进一步地,通过
Figure BDA0003669018010000043
计算CRC的状态回滚。
进一步地,状态回滚电路只与状态寄存器相关,其最大关联数为32 (三)有益效果
本发明提出一种CRC并行计算方法,本发明通过对状态转移矩阵的拆分降低了CRC状态寄存器关联逻辑的复杂度,提升了电路时序特性;本发明通过状态回滚逻辑消除了大位宽并行时报文尾部冗余0对状态寄存器的影响。通过作者在xilinx Kintex7325t-2芯片上验证,位宽为256bit的数据流时钟频率可达到250Mhz,数据吞吐量达64Gbps;在xilinxvu13p-2芯片时钟频率达400Mhz,数据吞吐量达100Gbps。
附图说明
图1为LFSR电路示意图;
图2为本发明的网络报文流式接口数据示意图;
图3为本发明的256bit输入数据处理示意图;
图4为本发明的原始数据被分割为8份数据示意图;
图5为本发明的整体处理流程图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明基于模运算的结合律对传统的并行CRC方案进行拆解,以降低逻辑复杂度,改善电路时序。
本发明的原理如下:
本发明方案依赖于并行CRC计算的矩阵表示,简要地罗列如下:
状态递推
分析图1的LFSR电路可知,
Figure BDA0003669018010000051
将R看做电路状态,则下一时刻的状态仅仅取决于电路当前的状态以及当前输入的数据,分析电路可知
Figure BDA0003669018010000052
公式中各个变量为矩阵形,具体形式如下:
Figure BDA0003669018010000053
为rx1矩阵
Figure BDA0003669018010000054
Figure BDA0003669018010000055
为rxr矩阵
W[n]为标量,表示第n个输入bit
Figure BDA0003669018010000061
为rx1矩阵。
多级递推
通过
Figure BDA0003669018010000062
递推t拍后可得:
Figure BDA0003669018010000063
上式可进一步将输入数据W写为矩阵形式如下
Figure BDA0003669018010000064
其中
Figure BDA0003669018010000065
为rxr矩阵,
Figure BDA0003669018010000066
为rxt矩阵,
Figure BDA0003669018010000067
为tx1向量
状态回滚
在公式2中LFSR寄存器中的值仅通过
Figure BDA0003669018010000068
传递至下一级,当输入W[n]为0 时
Figure BDA0003669018010000069
矩阵
Figure BDA00036690180100000610
为满秩矩阵,存在逆矩阵
Figure BDA00036690180100000611
使得
Figure BDA00036690180100000612
通过计算可知
Figure BDA00036690180100000613
Figure BDA00036690180100000614
为rxr矩阵。通过
Figure BDA00036690180100000615
可计算CRC的状态回滚。
基于以上数学基础有如下实现方案。
本文主要针对网络报文流式接口进行实时CRC计算。在高速网络接口中,接口数据位宽通常可达数百bit,时钟速率数百Mhz。本文以256bit数据接口为例进行分析,其他位宽接口的分析和计算类似。其中网络报文流式接口数据如图2:
具体实施步骤如下:
步骤是S1:输入报文填充
1个word为256bit,由于以太网等网络的网络报文长度为整数个byte数据,但byte数量不确定,故其起始位置和结束位置在256bit word中存在256/8=32种可能,为了计算方便我们在报文起始word和结束word的非报文字节填充0,并记录结束 word填充的0的数量p。填充0的目标是256bit对齐。根据CRC算法的原理,在起始字节之前填充的0不影响计算结果;在结束字节之后填充的0会推动CRC寄存器继续转动,从而影响最终计算值,但我们可以利用上文提到的状态回滚矩阵回滚CRC寄存器值,消除后续填充0的影响。如图2.
步骤S2:报文拆分与子状态迭代计算
由于CRC运算本质上为GF(2)域的取模运算,根据加法结合律,参与CRC 运算的数据可以进行加性拆分,每份拆分数据分别计算CRC后得到的状态寄存器进行求和即可得到原始数据的CRC值。
通过合理的拆分可以减少状态寄存器在逐拍递推时的关联数据数量,从而减少逻辑复杂度,改善电路时序。
输入多个word,每个word为256bit数据,本发明将256bit输入数据分为8个lane每个lane包含32bit,如图3:
将输入数据按照lane进行分割,则原始数据被分割为8份数据如图4:
拆分后得到8个lane,每个lane 32bit数据标记为
Dl0[31..0]=W[31..0]
Dl1[31..0]=W[63..32]
Dl2[31..0]=W[95..64]
Dl3[31..0]=W[127..96]
Dl4[31..0]=W[159..128]
Dl5[31..0]=W[191..160]
Dl6[31..0]=W[223..192]
Dl7[31..0]=W[255..224]
上述数据代入公式5可得各个lane状态寄存器的递推公式
Figure BDA0003669018010000081
k为lane编号范围0..7,
Figure BDA0003669018010000082
为r×r的状态转移矩阵,
Figure BDA0003669018010000083
为r×1生成多项式系数矩阵,
Figure BDA0003669018010000084
为r×1寄存器状态矩阵,r为CRC的阶数,n表示第n拍,Dlk[i]为第k个 lane的数据;
Figure BDA0003669018010000089
表示M的z次幂,对于电路运算来书,表示移位z个bit的状态转移矩阵。
Figure BDA0003669018010000085
Figure BDA0003669018010000086
Figure BDA0003669018010000087
其中,E(r-1)为r-1阶单位矩阵,g为多项式系数;
由上式可见各个lane状态寄存器各个bit最大关联数不超过64(状态寄存器数 +lane宽度)。通过计算在多项式为802.3CRC32时最大关联数为42,与直接32bit 并行计算CRC的最大关联数34相当,相对256bit数据直接计算时的157有了极大的缩减。
表1不同位宽并行计算802.3CRC32关联数量
Figure BDA0003669018010000088
Figure BDA0003669018010000091
步骤S3:子状态合并与状态回滚
在最后一个word计算完成后,算法得到8个状态寄存器,将状态寄存器进行异或操作(GF2域加法)后得到合并后状态寄存器,该合并后状态寄存器的值即为对应输入数据的CRC值。
对于在结束字节之后填充的0的场合,该合并后状态寄存器的值为尾部补0 的数据对应的CRC值,需要根据结束word填充的0的数量p通过公式7进行状态回滚,回滚后的状态寄存器即为最终的CRC校验值。
其中,
Figure BDA0003669018010000092
Figure BDA0003669018010000093
为r×r矩阵;通过
Figure BDA0003669018010000094
计算CRC的状态回滚。
状态回滚电路只与状态寄存器相关,其最大关联数为32。与计算状态寄存器的电路复杂度相当,在时序上不会成为关键路径。
本发明的整体处理流程如图5:
本发明通过对状态转移矩阵的拆分降低了CRC状态寄存器关联逻辑的复杂度,提升了电路时序特性;本发明通过状态回滚逻辑消除了大位宽并行时报文尾部冗余0对状态寄存器的影响。通过作者在xilinx Kintex7325t-2芯片上验证,位宽为256bit的数据流时钟频率可达到250Mhz,数据吞吐量达64Gbps;在xilinx vu13p-2芯片时钟频率达400Mhz,数据吞吐量达100Gbps。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (10)

1.一种CRC并行计算方法,其特征在于,该方法包括:
输入多个word,每个word为256bit数据,将256bit输入数据分为8个lane,每个lane包含32bit,标记为
Dl0[31..0]=W[31..0]
Dl1[31..0]=W[63..32]
Dl2[31..0]=W[95..64]
Dl3[31..0]=W[127..96]
Dl4[31..0]=W[159..128]
Dl5[31..0]=W[191..160]
Dl6[31..0]=W[223..192]
Dl7[31..0]=W[255..224]
各个lane的状态寄存器的递推公式为:
Figure FDA0003669010000000011
其中,k为lane编号范围0,…,7,
Figure FDA0003669010000000012
为r×r的状态转移矩阵,
Figure FDA0003669010000000013
为r×1生成多项式系数矩阵,
Figure FDA0003669010000000014
为r×1寄存器状态矩阵,r为CRC的阶数,n表示第n拍,Dlk[i]为第k个lane的数据;
Figure FDA0003669010000000015
Figure FDA0003669010000000016
Figure FDA0003669010000000017
其中,E(r-1)为r-1阶单位矩阵,g为多项式系数;
在最后一个word计算完成后,得到8个状态寄存器,将状态寄存器进行异或操作后得到合并后状态寄存器;该合并后状态寄存器的值即为对应输入数据的CRC值。
2.如权利要求1所述的CRC并行计算方法,其特征在于,各个lane状态寄存器各个bit最大关联数不超过64。
3.如权利要求1所述的CRC并行计算方法,其特征在于,在计算多项式为CRC32时最大关联数为42。
4.如权利要求1所述的所述的CRC并行计算方法,其特征在于,
Figure FDA0003669010000000024
表示M的z次幂,对于电路运算来书,表示移位z个bit的状态转移矩阵。
5.如权利要求1所述的所述的CRC并行计算方法,其特征在于,状态寄存器的异或操作对应GF2域加法。
6.如权利要求1-5任一项所述的所述的CRC并行计算方法,其特征在于,输入数据为以太网网络报文。
7.如权利要求6所述的所述的CRC并行计算方法,其特征在于,在将256bit输入数据分为8个lane之前,还包括:在报文起始word和结束word的非报文字节填充0,并记录结束word填充的0的数量p。
8.如权利要求7所述的所述的CRC并行计算方法,其特征在于,将状态寄存器进行异或操作后得到合并后状态寄存器之后还包括:合并后状态寄存器的值为尾部补0的数据对应的CRC值,根据结束word填充的0的数量p通过公式7进行状态回滚,回滚后的状态寄存器即为最终的CRC校验值;
其中,
Figure FDA0003669010000000021
Figure FDA0003669010000000022
为r×r矩阵。
9.如权利要求8所述的所述的CRC并行计算方法,其特征在于,通过
Figure FDA0003669010000000023
计算CRC的状态回滚。
10.如权利要求8所述的所述的CRC并行计算方法,其特征在于,状态回滚电路只与状态寄存器相关,其最大关联数为32。
CN202210599566.5A 2022-05-30 2022-05-30 一种crc并行计算方法 Pending CN115001508A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210599566.5A CN115001508A (zh) 2022-05-30 2022-05-30 一种crc并行计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210599566.5A CN115001508A (zh) 2022-05-30 2022-05-30 一种crc并行计算方法

Publications (1)

Publication Number Publication Date
CN115001508A true CN115001508A (zh) 2022-09-02

Family

ID=83028336

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210599566.5A Pending CN115001508A (zh) 2022-05-30 2022-05-30 一种crc并行计算方法

Country Status (1)

Country Link
CN (1) CN115001508A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453261A (zh) * 2023-11-10 2024-01-26 珠海科创储能科技有限公司 设备的升级数据校验方法、存储介质及电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453261A (zh) * 2023-11-10 2024-01-26 珠海科创储能科技有限公司 设备的升级数据校验方法、存储介质及电子设备

Similar Documents

Publication Publication Date Title
US8468439B2 (en) Speed-optimized computation of cyclic redundancy check codes
US8745472B2 (en) Memory with segmented error correction codes
EP0609595B1 (en) Method and apparatus for verifying CRC codes by combination of partial CRC codes
EP0767539B1 (en) Highly parallel cyclic redundancy code generator
Lee High-speed VLSI architecture for parallel Reed-Solomon decoder
US7971122B2 (en) Method of computing partial CRCS
US6061826A (en) Hardware-optimized reed-solomon decoder for large data blocks
US7590916B2 (en) Cyclic redundancy checking value calculator
US5844923A (en) Fast framing of nude ATM by header error check
US8001446B2 (en) Pipelined cyclic redundancy check (CRC)
US7870466B2 (en) Parallel cyclic code generation device and parallel cyclic code error detection device
US20050149818A1 (en) High performance CRC calculation method and system with a matrix transformation strategy
JPH0856165A (ja) 誤り検査符号及び訂正符号の計算方法および装置
JP2010507290A (ja) 一組の多項式を用いたメッセージ剰余の決定
US6701478B1 (en) System and method to generate a CRC (cyclic redundancy check) value using a plurality of CRC generators operating in parallel
WO2018090860A1 (en) Cyclic redundancy check calculation for multiple blocks of a message
US20120173952A1 (en) Parallel crc computation with data enables
JP2010068429A (ja) 巡回符号演算処理回路
Sun et al. A table-based algorithm for pipelined CRC calculation
US7886210B2 (en) Apparatus for pipelined cyclic redundancy check circuit with multiple intermediate outputs
WO2012174933A1 (zh) Rs编码器的编码方法及rs编码器
CN115001508A (zh) 一种crc并行计算方法
US6848072B1 (en) Network processor having cyclic redundancy check implemented in hardware
EP0262944A2 (en) Error correction apparatus
JP4515651B2 (ja) 巡回冗長検査演算方法及び巡回冗長検査演算回路

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination