[go: up one dir, main page]

CN1633030A - 一种循环冗余校验的快速计算方法 - Google Patents

一种循环冗余校验的快速计算方法 Download PDF

Info

Publication number
CN1633030A
CN1633030A CN 200310122447 CN200310122447A CN1633030A CN 1633030 A CN1633030 A CN 1633030A CN 200310122447 CN200310122447 CN 200310122447 CN 200310122447 A CN200310122447 A CN 200310122447A CN 1633030 A CN1633030 A CN 1633030A
Authority
CN
China
Prior art keywords
shift register
lookup table
bits
input sequence
bit
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.)
Granted
Application number
CN 200310122447
Other languages
English (en)
Other versions
CN100388629C (zh
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.)
China Potevio Co ltd
Petevio Institute Of Technology Co ltd
Original Assignee
PUTIAN INST OF INFORMATION TECHNOLOGY
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 PUTIAN INST OF INFORMATION TECHNOLOGY filed Critical PUTIAN INST OF INFORMATION TECHNOLOGY
Priority to CNB2003101224478A priority Critical patent/CN100388629C/zh
Publication of CN1633030A publication Critical patent/CN1633030A/zh
Application granted granted Critical
Publication of CN100388629C publication Critical patent/CN100388629C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Error Detection And Correction (AREA)

Abstract

本发明公开了一种循环冗余校验的快速计算方法,根据当前所采用CRCn生成多项式对应的逻辑结构,预先得出在不同输入比特的处理状态下,CRCn所用到的每个移位寄存器的状态更新情况与其它移位寄存器和输入比特位之间的关系,并根据该关系生成对应的查找表;在进行CRCn校验时,直接利用预先生成的查找表获取每个移位寄存器当前状态下的输出。该方法能大大提高CRC校验的处理速度,降低CRC校验的处理时延,进而一定程度地提高业务处理能力,并且,该方法在保证快速计算速度的同时,能达到最佳的存储量/时延配置。

Description

一种循环冗余校验的快速计算方法
技术领域
本发明涉及循环冗余校验技术,特别是指一种循环冗余校验的快速计算方法。
背景技术
随着技术的不断进步,各种数据通信的应用越来越广泛,由于传输距离、现场状况、干扰等诸多因素的影响,设备之间的通信数据常会发生一些无法预测的错误。为了降低错误所带来的影响,一般在通信时采用数据校验的方法,循环冗余码校验(CRC)就是常用的重要校验方法之一。
CRC校验为数据传输提供了一种简单而有效的突发差错检测方法,可适用于很多方面。CRC校验采用多项式编码方法,被处理的数据块可以看作是一个n阶的二进制多项式。比如:假定待发送的二进制数据段为g(x),生成多项式为m(x),则得到的CRC校验码为c(x),具体说就是,CRC校验码的编码方法是用待发送的二进制数据g(x)除以生成多项式m(x),将最后的余数作为CRC校验码。该CRC编码既可以通过软件实现,也可以通过硬件实现;既可以用结构简单,但处理时延较大的串行方法构造;也可以用结构复杂,但是处理时延较小的并行方法构造。
目前,CRC编码技术已经较为成熟,主要采用的实现方案有以下三种:
第一种是基本的比特级构造方法,也可以称作直接计算法,这是最简单的CRC计算方法,是通过硬件实现的,如图1所示,该方法在硬件上主要通过线性反馈移位寄存器(LFSR)来实现。移位寄存器由时钟驱动,每个时钟输入数据移位寄存器参与计算,同时也直接输出;当所有的输入比特都处理完成之后,移位寄存器中剩下的就是CRC比特,将该CRC比特依次移出到数据流上,就完成了CRC编码。在实际应用中,可采用以下算法具体实现:
a1.定义一个寄存器R用来存放循环冗余校验码,寄存器的长度一般为处理器的基本存储单元的整数倍,比如8比特、16比特、32比特等等,并且将寄存器R的值置为0;
a2.如果寄存器R最左边的比特等于1,则将下一个消息比特移入,并且将寄存器R和生成多项式进行异或;否则只将消息比特移入即可;
a3.重复步骤a2,直到所有消息比特都被移入处理,留在寄存器R中的就是输入序列的循环冗余校验码。
这种方法所用的模块代码少,不需要存储查找表,计算简单,修改灵活,可移植性好,软硬件实现的复杂度差不多,对任意长度生成多项式m(x)都适用。但如果发送的数据块很长,该方法就不太适合,因为该方法需要逐比特处理,也就是一次只能处理一位数据,效率太低,运算量大,不能满足实时处理的要求,对于高速数据通信更不适用。
第二种是标准查找表算法,该方法的CRC计算可认为是输入比特和移位寄存器状态比特构成的多项式对生成多项式的余数,该方法需要预先提供CRC生成表。假定寄存器的宽度为n,输入比特位数为m,则在实际应用中,当m<n时,可采取下面的操作步骤:
b1.定义一个宽度为n比特的寄存器R用来存放循环冗余校验码,寄存器的长度一般为处理器的基本存储单元的整数倍,比如8比特、16比特、32比特等等,并且将寄存器R的值置为0,即设置(rn-1,...,r0)比特序列为0;
b2.将寄存器R右移n-m比特,即得到(Rn-1,...,rn-k-r)序列,然后所得到的序列和m个输入比特异或;
b3.在查找表中找到对应的值,与寄存器R左移m比特得到的序列(rm-1,...,r0)异或,就得到新的CRC值;
b4.重复步骤b2和b3,直到所有消息比特都被移入处理,留在寄存器R中的就是输入序列的循环冗余校验码。
当n=m时,步骤b2和步骤b3会有些许改变:
b2’.将输入的m个比特与寄存器R异或,也就是将输入的m比特与(rn-k-1,...,r0)异或;
b3’.在查找表里面找到对应的值,就得到新的CRC值。
当n<m时,不能采取这种算法。
这种算法需要提供存储2m×n比特大小的查找表,每处理m比特需要执行一次查表和两次异或操作,软硬件实现时复杂度和性能差不多。与直接计算法相反,该方法运算量小,速度快,但是可移植性较差,且应用有局限性,不能处理m>n时的情况,也就是说,每次处理的比特数m不能大于生成多项式的最高阶数n,否则就不能应用该算法。
此外,所存储的查找表随着m的增加而成2的指数增加,比如:每次处理8个比特时,查找表大小为256个存储单元;每次处理16个比特时,查找表大小就变为65536个存储单元,可见,这种方法的并行度不能过高。
第三种是并行循环冗余校验编码方法,如图2所示,这是一种基于线性反馈移位寄存器的并行结构,图2中,d0~dm-1表示并行输入序列的m个比特位,er,c为矩阵Fw的第r行第c列,x0~xm-1为输出的系统状态列向量,其中w为并行输入级数。该方法实际是通过硬件门电路来构建当前CRCn生成多项式所对应的各个寄存器之间的关系,最终获取CRC值。
不难看出,该方法的速度是常规方法的w倍,代价就是存储一个F16矩阵并增加硬件的复杂度。该方法的并行度很高,适合硬件如采用FPGA实现,但该算法并不适合软件比如用DSP芯片实现。原因很简单,图2所示的并行结构并行度为m,一般的处理器都达不到这么高的并行度。
随着第三代移动通信中高速数据业务的发展,CRC校验也在第三代移动通信的数据传输中得以大量应用。但由于3GPP基带处理的时延要求相当严格,基带处理器的性能与单位时间内的业务处理能力紧密相关,这样,CRC编码的效率好坏,就会直接影响到基带处理器的性能。如果没有合适的快速CRC校验的计算方法,将会使高速数据通信中的业务处理能力受到很大影响。
发明内容
有鉴于此,本发明的主要目的在于提供一种循环冗余校验的快速计算方法,能大大提高CRC校验的处理速度,降低CRC校验的处理时延,进而一定程度地提高业务处理能力。
本发明进一步的目的是一种循环冗余校验的快速计算方法,使其在保证快速计算速度的同时,达到最佳的存储量/时延配置。
为达到上述目的,本发明的技术方案是这样实现的:
一种循环冗余校验的快速计算方法,该方法包括以下步骤:
a.根据当前所采用CRCn生成器的逻辑结构,获取并存储该生成器中每个移位寄存器在处理每个输入比特时的状态;
b.从步骤a所获取的所有移位寄存器的全部状态中,提取出处理完输入序列每个比特后CRCn生成器中每个移位寄存器的状态;并将所提取出的每个移位寄存器状态组成中的移位寄存器初始状态表示部分和输入序列表示部分分别存储;
c.以每个分别存储部分包含的自变量为地址索引,生成该存储部分对应的查找表;
d.以CRCn模式进行CRC校验时,判断当前需处理的比特数是否大于每次能处理的比特数m,如果不是,则按串行方式处理;如果是,则读取m比特,分别以输入比特和移位寄存器变量为地址索引,查找输入序列表示部分对应的查找表和移位寄存器初始状态表示部分对应的查找表,然后将所有查找结果进行异或并保存异或结果;将对应每个移位寄存器的异或结果分别作为该移位寄存器的当前状态,返回步骤d。
其中,步骤c和步骤d之间进一步包括:判断分别存储的移位寄存器初始状态表示部分或输入序列表示部分是否需要继续细分,如果需要,则按给定条件将当前的存储部分进一步划分为一个以上存储部分,并对划分后的每个存储部分分别生成对应的查找表;否则,直接执行步骤d。
该方法进一步包括:预先设置需要进行细分的条件,则所述判断是否需要细分为判断是否符合细分条件,如果符合,则需要细分;否则不需要细分。这里,所述进行细分的条件为:步骤b中所划分的分别存储部分的存储量大于给定存储量。
如果将当前存储部分进一步划分为一个以上存储部分,则步骤d中所述查找输入序列表示部分对应的查找表和移位寄存器初始状态表示部分对应的查找表是:分别查找至少一个输入序列表示部分对应的查找表和一个以上移位寄存器初始状态表示部分对应的查找表。
上述方案中,可将每个存储部分的内容分别存储在表中。另外,CRCn生成器中每个移位寄存器的初始状态存储在寄存器中,或放置在向量中。
本发明所提供的循环冗余校验的快速计算方法,由于根据当前所采用CRCn生成多项式对应的逻辑结构,预先得出在不同输入比特的处理状态下,CRCn所用到的每个寄存器的当前状态与其他寄存器及输入比特位的关系,生成对应的查找表,使得在进行CRC校验时,可直接根据预先生成的查找表计算出每个寄存器当前状态下的输出,从而大大提高了CRC校验的处理速度,也就是降低了CRC校验的处理时延。
本发明的方法对所得到的关系按寄存器值和输入比特位值进行划分,并可根据需要或根据算法复杂度的情况,对已划分的寄存器部分或输入比特位部分再细分,如此,可不同程度的减小存储量,以较小的存储代价,换取了很大的处理时延。并且,本发明方法具有相当的灵活性,在保证计算速度快的前提下,可随时根据具体条件,确定最佳的存储量/计算时间配置,能实现很高的并行度。
附图说明
图1为一种LFSR的组成结构示意图;
图2为并行CRC体系结构示意图;
图3为本发明方法的实现流程图;
图4为本发明一实施例的逻辑结构示意图;
图5为图4所述实施例的CRC计算过程示意图。
具体实施方式
本发明的基本思想就是:根据当前所采用CRCn生成多项式对应的逻辑结构,预先得出在不同输入比特的处理状态下,CRCn所用到的每个移位寄存器的状态更新情况与其它移位寄存器和输入比特位之间的关系,并根据该关系生成对应的查找表;在进行CRCn校验时,直接利用预先生成的查找表获取每个移位寄存器当前状态下的输出。
如图3所示,本发明方法的具体实现过程包括以下步骤:
步骤301:根据当前所采用CRCn生成器的逻辑结构,获取并存储该生成器中所涉及的每个移位寄存器在处理每个输入比特时的状态。
步骤302:从步骤301所获取的所有移位寄存器的全部状态中,提取出处理完输入序列每个比特后CRCn生成器的每个移位寄存器的状态。
步骤303~304:将步骤302所提取出的每个移位寄存器状态组成中的移位寄存器初始状态表示部分和输入序列表示部分分别存储;并以每个分别存储部分包含的自变量为地址索引,生成该存储部分对应的查找表。
步骤305~306:在以CRCn模式进行CRC校验时,先判断当前需处理的比特数是否大于每次能处理的比特数m,如果不是,则按现有技术中一般的串行方法处理;如果是,则执行步骤307。
步骤307~310:读取m比特的信息,分别以输入比特和移位寄存器变量为地址索引,查找输入序列表示部分对应的查找表和移位寄存器初始状态表示部分对应的查找表,并将所有查找结果进行异或,保存异或结果;并且,将对应每个移位寄存器的异或结果分别作为该移位寄存器的当前状态,然后返回步骤305。
在步骤304和步骤305之间还可以增加一个判断,判断分别存储的移位寄存器初始状态表示部分或输入序列表示部分是否还需继续细分,如果需要,则按给定条件将当前的存储部分进一步划分为一个以上存储部分,并对划分后的每个存储部分分别生成对应的查找表。可预先设置细分条件,比如:查找表的存储量大于某个给定值就再细分,那么,细分时就按照存储量给定值来决定如何细分,具体说就是,当前存储部分的查找表存储量为64K,而给定值为32K,那么,就会将当前存储部分再进一步划分为两个存储部分。如果进行了细分,则步骤308、或步骤309、或步骤308和步骤309要分别以每个存储部分所含的自变量为地址索引,查找相应的查找表,再将所有查找结果进行异或。
对于上述每个步骤提到的存储,都可以设置一个表进行存储,如果某两个表是从某个表中划分出来的,则这两个表可称为原表的子表。
为了方便进一步详细说明本发明中CRC的快速计算原理,下面以CRC16为例,同时结合CRC16的生成多项式和逻辑结构图作为参考。
CRC16所采用的查找表的生成过程包括以下几个步骤:
第一步,根据CRC16生成器的逻辑结构获取每个移位寄存器在处理每个输入比特时的状态。
CRC16的生成多项式如公式(1)所示:
               gcrc16(D)=D16+D12+D5+1    (1)
CRC16的逻辑结构如图4所示,CRC16的生成器包括16个移位寄存器R1~R16,图4中的表示模2加,也就是异或。假设以R1~R16分别代表这16个移位寄存器的初始状态,并且当前的输入序列为M,Mi代表输入序列的第i比特位,本实施例中,输入序列M由8个比特位组成,即M1~M8。那么,可以根据图4得出每次处理一个输入比特时每个移位寄存器的状态更新情况,其中移位寄存器的所有状态都是由初始状态R1~R16和输入序列M表示的。每个移位寄存器每个时刻的状态具体如表一所示:
M1  M2  M3  M4  M5  M6  M7 M8
 R16  R15  R14  R13  R12+M1+R16  R11+M2+R15  R10+M3+R14  R9+M4+R13 R8+M5+R12+M1+R16
 R15  R14  R13  R12+M1+R16  R11+M2+R15  R10+M3+R14  R9+M4+R13  R8+M5+R12+M1+R16  R7+M6+R11+M2+R15
 R14  R13  R12+M1+R16  R11+M2+R15  R10+M3+R14  R9+M4+R13  R8+M5+R12+M1+R16  R7+M6+R11+M2+R15  R6+M7+R10+M3+R14
 R13  R12+M1+R16  R11+M2+R15  R10+M3+R14  R9+M4+R13  R8+M5+R12+M1+R16  R7+M6+R11+M2+R15  R6+M7+R10+M3+R14  R5+M1+R16+M8+R9+M4+R13
 R12  R11  R10  R9  R8  R7  R6  R5+M1+R16  R4+M2+R15
 R11  R10  R9  R8  R7  R6  R5+M1+R16  R4+M2+R15  R3+M3+R14
 R10  R9  R8  R7  R6  R5+M1+R16  R4+M2+R15  R3+M3+R14  R2+M4+R13
 R9  R8  R7  R6  R5+M1+R16  R4+M2+R15  R3+M3+R14  R2+M4+R13  R1+M5+R12+M1+R16
 R8  R7  R6  R5+M1+R16  R4+M2+R15  R3+M3+R14  R2+M4+R13  R1+M5+R12+M1+R16  M1+R16+M6+R11+M2+R15
 R7  R6  R5+M1+R16  R4+M2+R15  R3+M3+R14  R2+M4+R13  R1+M5+R12+M1+R16  M1+R16+M6+R11+M2+R15  R15+M2+M7+R10+M3+R14
 R6  R5+M1+R16  R4+M2+R15  R3+M3+R14  R2+M4+R13  R1+M5+R12+M1+R16  M1+R16+M6+R11+M2+R15  R15+M2+M7+R10+M3+R14  R14+M3+M8+R9+M4+R13
 R5  R4  R3  R2  R1  M1+R16  R15+M2  R14+M3  R13+M4
 R4  R3  R2  R1  M1+R16  R15+M  R14+M3  R13+M4  R12+M1
  2   +R16+M5
  R3   R2   R1   M1+R16   R15+M2   R14+M3   R13+M4   R12+M1+R16+M5   R11+M2+R15+M6
  R2   R1   M1+R16   R15+M2   R14+M3   R13+M4   R12+M1+R16+M5   R11+M2+R15+M6   R10+M3+R14+M7
  R1   R16+M1   R15+M2   R14+M3   R13+M4   R12+M1+R16+M5   R11+M2+R15+M6   R10+M3+R14+M7   R9+M4+R13+M8
                           表一
表一中,第一列代表16个移位寄存器,第一行代表处理的输入比特Mi,相应的,第二列为处理第一输入比特M1时16个移位寄存器的当前状态;第二列为处理第二输入比特M2时16个移位寄存器的当前状态,以此类推,表中的“+”表示模2加。
上述表一的具体生成方法包括以下过程:首先,将图4中16个移位寄存器的初始状态存放在表一的第一列;然后,对于每个输入比特执行:根据当前输入比特,用前一时刻的移位寄存器状态和当前输入表示出当前时刻移位寄存器的状态,直至处理完8个比特。比如:移位寄存器R1的当前状态应该等于移位寄存器R16的当前状态与输入序列M的异或,而移位寄存器R2的当前状态就等于移位寄存器R1的当前状态;再比如:根据图4移位寄存器R6的当前状态就等于移位寄存器R5的当前状态与移位寄存器R16当前状态和输入序列M异或结果再异或,CRC16生成器中的移位寄存器状态均以此类推。
第二步,提取处理完输入序列每个比特后CRC16生成器的每个移位寄存器的状态。
表一生成后,可根据表一的最后一列获得每个移位寄存器处理完8个输入比特后的状态,分别用R’1~R’16来表示,则得到表二,表二为处理完输入序列每个比特后移位寄存器的状态列表:
 R′16  R8+R12+R16+M5+M1
 R′15  R7+R11+R15+M2+M6
 R′14  R6+R10+R14+M7+M3
 R′13  R5+R9+R13+R16+M1+M4+M8
 R′12  R4+R15+M2
 R′11  R3+R14+M3
 R′10  R2+R13+M4
 R′9  R1+R12+R16+M1+M5
 R′8  R16+R11+R15+M1+M2+M6
 R′7  R15+R10+R14+M2+M3+M7
 R′6  R14+R9+R13+M3+M8+M4
 R′5  R13+M4
 R′4  R12+R16+M1+M5
 R′3  R11+R15+M2+M6
 R′2  R10+R14+M3+M7
 R′1  R9+R13+M4+M8
                         表二
第三步,对所获得的处理完输入序列所有比特后每个移位寄存器的状态细成进行划分,并构造相应的查找表。
为了减少存储量和简化构造查找表的复杂度,将表二按照移位寄存器初始状态R1~R16和输入比特序列M1~M8分成两个子表,表三为处理完输入序列后每个移位寄存器状态与其它移位寄存器初始状态相关的部分,表四为处理完输入序列后每个移位寄存器状态与输入比特序列相关的部分。
 R′16  R8+R12+R16
 R′15  R7+R11+R15
 R′14  R6+R10+R14
 R′13  R5+R9+R13+R16
 R′12  R4+R15
 R′11  R3+R14
 R′10  R2+R13
 R′9  R1+R12+R16
 R′8  R16+R11+R15
 R′7  R15+R10+R14
 R′6  R14+R9+R13
 R′5  R13
 R′4  R12+R16
 R′3  R11+R15
 R′2  R10+R14
 R′1  R9+R13
         表三
 R′16  M5+M1
 R′15  M2+M6
 R′14  M7+M3
 R′13  M1+M4+M8
 R′12  M2
 R′11  M3
 R′10  M4
 R′9  M1+M5
 R′8  M1+M2+M6
 R′7  M2+M3+M7
 R′6  M3+M8+M4
 R′5  M4
 R′4  M1+M5
 R′3  M2+M6
 R′2  M3+M7
 R′1  M4+M8
      表四
这里,所述构造相应的查找表就是:根据表三或表四中所有自变量的不同取值,计算出对应的R’1~R’16值。以表四为例,表四中的自变量为M1~M8,由于M1~M8每个比特位均可取0或取1,所以M1~M8的取值共有256种不同组合。那么,构造查找表的具体过程是:先列出M1~M8的256种取值;再根据表四中R’1~R’16与M1~M8的关系,计算出M1~M8每种不同取值所对应的R’1~R’16的值;以M1~M8为地址索引,将所有的R’1~R’16值都存储到寄存器中,每个字节的地址寻址一个字;最后形成的关于R’1~R’16的256种取值就是所需的查找表。比如:M1~M8的取值为01111010时,由于R’1为M4+M8,这里M4=1,M8=0,则计算出R’1的取值为1;同样R’2为M3+M7,这里M3=1,M7=1,则计算出R’2的取值为0;其它R’i(i=3,4...16)的计算方法类似,不再赘述。如果用于处理的DSP芯片是以字为存储单元的话,就不需要特殊的处理;如果是以字节为存储单元的话,就需要对8比特宽度的M地址索引进行2倍的扩展。
表三中的自变量是R1~R16,总共有216种组合。如果直接以R1~R16为地址索引,将对应的R’1~R’16存储到存储器中,存储量就是64K字。对于64K字的存储量,可以直接采用;也可以继续将表三进行划分,以减少存储量。如果需要继续划分表三,则执行第四步。
第四步,进一步细化处理完输入序列后每个移位寄存器状态与其它移位寄存器初始状态相关的部分,也就是将表三进一步划分为两个子表,并构造每个子表相应的查找表。
将表三中的自变量R1~R16分成R1~R8和R9~R16两组,相应的,将表三分为与两组自变量对应的两个子表:表五和表六。通常情况下,表五以自变量R1~R8作为地址索引,将相应的R’1~R’16值存储到存储器中,形成查找表;表六以自变量R9~R16作为地址索引,将相应的R’1~R16值存储到存储器中,形成查找表。
 R′16  R8
 R′15  R7
 R′14  R6
 R′13  R5
 R′12  R4
 R′11  R3
 R′10  R2
 R′9  R1
 R′8  0
 R′7  0
 R′6  0
 R′5  0
 R′4  0
 R′3  0
 R′2  0
 R′1  0
      表五
 R′16  R12+R16
 R′15  R11+R15
 R′14  R10+R14
 R′13  R9+R13+R16
 R′12  R15
 R′11  R14
 R′10  R13
 R′9  R12+R16
 R′8  R16+R11+R15
 R′7  R15+R10++R14
 R′6  R14+R9+R13
 R′5  R13
 R′4  R12+R16
 R′3  R11+R15
 R′2  R10+R14
 R′1  R9+R13
          表六
在实际操作中,如果输入序列M的比特数为16、32等,同样可以将处理完输入序列后每个移位寄存器状态与输入比特序列相关的部分按上述类似的方法划分,即可将表四进一步划分为两个子表,并构造每个子表相应的查找表。这里,形成查找表的过程与第三步中所述构造查找表的过程相同。
经过以上四个步骤,本实施例中所需的查找表就构造完成了。实际上,在本实施例中,表五可以不构造查找表,只要将地址索引R1~R8进行算术移位,即可获得对应的R’1~R’16。
基于上面所构造的查找表,以CRC16进行校验时,CRC的计算过程如图5所示包括以下步骤:
步骤501:判断当前需要处理的比特数是否小于每次能处理的比特数m,本实施例中m值取8,那么,如果剩余比特大于8,则执行步骤504;否则,执行步骤502。
步骤502~503:按照一般的串行输入方法对剩余比特进行CRC计算处理,并读出移位寄存器中的值,结束当前CRC计算流程。
步骤504:将图4所示的移位寄存器初始状态存储到一个16比特长的存储单元R中。这里,如果采用DSP实现,可存储到一个寄存器中;如果采用FPGA实现,可存储在一个16比特的向量中。
步骤505~506:从待处理的比特流中取出m个比特存储到存储单元M中,其中m常取8、16等值,本实施例中取m=8。以M1~M8为地址索引查找表四生成的查找表,获取对应的R’1~R’16,分别存储于第i个16比特存储单元Ti中。如果M表被划分为多个子表,比如M取16、32等值时,查找每个子表对应的查找表,并将获取的R’1~R’16进行模2加后分别存储于存储单元Ti中。
步骤507:以R1~R8为地址索引进行算术移位运算,将获取的R’1~R’16构成的字或向量与对应的存储单元Ti中的值进行模2加,结果再存储到对应的存储单元Ti中;再以R9~R16为地址索引,查找表六对应的查找表,将获取的R’1~R’16构成的字或向量与对应的存储单元Ti中的值进行模2加,结果存储至对应的存储单元Ti中。
如果存在更多的子表,比如CRC24、CRC32时,初始状态有24、32比特宽,这些情况下,查找所有子表对应的查找表,每次将当前所获取的表项与对应的存储单元Ti中的值进行模2加,再存储到对应的Ti中。
步骤508:将存储单元T1~T16的值存入R1~R16中,作为处理完m个比特后移位寄存器Ri的状态,并作为下一阶段CRC计算移位寄存器Ri的初始状态,返回步骤501。
按照本发明方法进行CRC计算,在性能上,如果有T个子表,则需要进行T次查表操作和T-1次异或操作,可以在复杂度不增加的情况下加快CRC计算速度。在存储开销方面,在保证性能不变甚至提高的情况下,可明显降低存储开销。以3GPP中常用的8位、12位、16位和24位CRC模式为例,当m=8,即每次处理8个输入比特时,每个子表大小都为256,单位由CRC长度决定。具体存储开销如表七所示:
CRC模式 8  12  16  24
子表数 2  3  3  4
表格总长度(比特) 2×28×8  3×28×12  3×28×16  4×28×24
                          表七
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (7)

1、一种循环冗余校验的快速计算方法,其特征在于,该方法包括以下步骤:
a.根据当前所采用CRCn生成器的逻辑结构,获取并存储该生成器中每个移位寄存器在处理每个输入比特时的状态;
b.从步骤a所获取的所有移位寄存器的全部状态中,提取出处理完输入序列每个比特后CRCn生成器中每个移位寄存器的状态;并将所提取出的每个移位寄存器状态组成中的移位寄存器初始状态表示部分和输入序列表示部分分别存储;
c.以每个分别存储部分包含的自变量为地址索引,生成该存储部分对应的查找表;
d.以CRCn模式进行CRC校验时,判断当前需处理的比特数是否大于每次能处理的比特数m,如果不是,则按串行方式处理;如果是,则读取m比特,分别以输入比特和移位寄存器变量为地址索引,查找输入序列表示部分对应的查找表和移位寄存器初始状态表示部分对应的查找表,然后将所有查找结果进行异或并保存异或结果;将对应每个移位寄存器的异或结果分别作为该移位寄存器的当前状态,返回步骤d。
2、根据权利要求1所述的方法,其特征在于,步骤c和步骤d之间进一步包括:判断分别存储的移位寄存器初始状态表示部分或输入序列表示部分是否需要继续细分,如果需要,则按给定条件将当前的存储部分进一步划分为一个以上存储部分,并对划分后的每个存储部分分别生成对应的查找表;否则,直接执行步骤d。
3、根据权利要求2所述的方法,其特征在于,该方法进一步包括:预先设置需要进行细分的条件,则所述判断是否需要细分为判断是否符合细分条件,如果符合,则需要细分;否则不需要细分。
4、根据权利要求3所述的方法,其特征在于,所述进行细分的条件为:步骤b中所划分的分别存储部分的存储量大于给定存储量。
5、根据权利要求2所述的方法,其特征在于,如果将当前存储部分进一步划分为一个以上存储部分,则步骤d中所述查找输入序列表示部分对应的查找表和移位寄存器初始状态表示部分对应的查找表是:分别查找至少一个输入序列表示部分对应的查找表和一个以上移位寄存器初始状态表示部分对应的查找表。
6、根据权利要求1所述的方法,其特征在于,将每个存储部分的内容分别存储在表中。
7、根据权利要求1所述的方法,其特征在于,CRCn生成器中每个移位寄存器的初始状态存储在寄存器中,或放置在向量中。
CNB2003101224478A 2003-12-22 2003-12-22 一种循环冗余校验的快速计算方法 Expired - Lifetime CN100388629C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2003101224478A CN100388629C (zh) 2003-12-22 2003-12-22 一种循环冗余校验的快速计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2003101224478A CN100388629C (zh) 2003-12-22 2003-12-22 一种循环冗余校验的快速计算方法

Publications (2)

Publication Number Publication Date
CN1633030A true CN1633030A (zh) 2005-06-29
CN100388629C CN100388629C (zh) 2008-05-14

Family

ID=34844509

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2003101224478A Expired - Lifetime CN100388629C (zh) 2003-12-22 2003-12-22 一种循环冗余校验的快速计算方法

Country Status (1)

Country Link
CN (1) CN100388629C (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101847999A (zh) * 2010-05-28 2010-09-29 清华大学 一种用循环冗余校验码进行并行校验的方法
CN101976214A (zh) * 2010-09-30 2011-02-16 西北工业大学 一种自适应速率crc码的实现方法及其装置
CN101207467B (zh) * 2006-12-19 2011-05-18 大唐移动通信设备有限公司 循环冗余校验码的生成和数据序列发送、校验方法及装置
CN102612173A (zh) * 2011-01-21 2012-07-25 芯讯通无线科技(上海)有限公司 多模手机及其通讯模块之间的通讯方法
CN102739258A (zh) * 2011-04-14 2012-10-17 普天信息技术研究院有限公司 一种计算循环冗余校验码的方法及装置
CN102761394A (zh) * 2012-07-05 2012-10-31 中兴通讯股份有限公司 数据的处理方法及装置
CN103795502A (zh) * 2014-02-28 2014-05-14 杭州华三通信技术有限公司 一种数据帧校验码生成方法和装置
CN106788878A (zh) * 2015-11-24 2017-05-31 中国航空工业第六八研究所 一种具有单比特纠错功能的并行crc纠错方法
CN108574490A (zh) * 2018-05-08 2018-09-25 华为技术有限公司 计算循环冗余校验crc编码的方法及装置
CN111740882A (zh) * 2020-07-29 2020-10-02 江苏金智科技股份有限公司 一种线路保护测控装置自动校验配置文件方法
CN114942861A (zh) * 2022-03-22 2022-08-26 安吉芥子科技有限公司 Crc计算方法、装置、计算机设备及存储介质
CN119519729A (zh) * 2024-10-09 2025-02-25 中国工程物理研究院电子工程研究所 一种循环冗余校验码寄存器初始状态反衍方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6360348B1 (en) * 1999-08-27 2002-03-19 Motorola, Inc. Method and apparatus for coding and decoding data
US6609226B1 (en) * 2000-04-10 2003-08-19 Nortel Networks Limited Networking device and method for making cyclic redundancy check (CRC) immune to scrambler error duplication
CN1112778C (zh) * 2000-08-08 2003-06-25 深圳市中兴通讯股份有限公司 一种数字通信系统中的信道循环冗余码校验的方法
US20030093381A1 (en) * 2001-11-09 2003-05-15 David Hohl Systems and methods for authorization of data strings

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101207467B (zh) * 2006-12-19 2011-05-18 大唐移动通信设备有限公司 循环冗余校验码的生成和数据序列发送、校验方法及装置
CN101847999B (zh) * 2010-05-28 2012-10-10 清华大学 一种用循环冗余校验码进行并行校验的方法
CN101847999A (zh) * 2010-05-28 2010-09-29 清华大学 一种用循环冗余校验码进行并行校验的方法
CN101976214A (zh) * 2010-09-30 2011-02-16 西北工业大学 一种自适应速率crc码的实现方法及其装置
CN101976214B (zh) * 2010-09-30 2012-12-19 西北工业大学 一种自适应速率crc码的实现方法及其装置
CN102612173B (zh) * 2011-01-21 2016-08-10 芯讯通无线科技(上海)有限公司 多模手机及其通讯模块之间的通讯方法
CN102612173A (zh) * 2011-01-21 2012-07-25 芯讯通无线科技(上海)有限公司 多模手机及其通讯模块之间的通讯方法
CN102739258A (zh) * 2011-04-14 2012-10-17 普天信息技术研究院有限公司 一种计算循环冗余校验码的方法及装置
CN102761394A (zh) * 2012-07-05 2012-10-31 中兴通讯股份有限公司 数据的处理方法及装置
CN103795502A (zh) * 2014-02-28 2014-05-14 杭州华三通信技术有限公司 一种数据帧校验码生成方法和装置
CN103795502B (zh) * 2014-02-28 2017-04-12 杭州华三通信技术有限公司 一种数据帧校验码生成方法和装置
CN106788878A (zh) * 2015-11-24 2017-05-31 中国航空工业第六八研究所 一种具有单比特纠错功能的并行crc纠错方法
CN106788878B (zh) * 2015-11-24 2019-11-15 中国航空工业第六一八研究所 一种具有单比特纠错功能的并行crc纠错方法
CN108574490A (zh) * 2018-05-08 2018-09-25 华为技术有限公司 计算循环冗余校验crc编码的方法及装置
CN111740882A (zh) * 2020-07-29 2020-10-02 江苏金智科技股份有限公司 一种线路保护测控装置自动校验配置文件方法
CN114942861A (zh) * 2022-03-22 2022-08-26 安吉芥子科技有限公司 Crc计算方法、装置、计算机设备及存储介质
CN114942861B (zh) * 2022-03-22 2025-09-16 浙江芥子半导体科技有限公司 Crc计算方法、装置、计算机设备及存储介质
CN119519729A (zh) * 2024-10-09 2025-02-25 中国工程物理研究院电子工程研究所 一种循环冗余校验码寄存器初始状态反衍方法
CN119519729B (zh) * 2024-10-09 2025-08-29 中国工程物理研究院电子工程研究所 一种循环冗余校验码寄存器初始状态反衍方法

Also Published As

Publication number Publication date
CN100388629C (zh) 2008-05-14

Similar Documents

Publication Publication Date Title
CN1138352C (zh) 通信系统的交织/解交织装置和方法
CN100388630C (zh) 具有矩阵转换技术的循环冗余码计算方法及系统
CN1633030A (zh) 一种循环冗余校验的快速计算方法
CN1121095C (zh) 用于通信系统的交织设备和方法
CN103795502B (zh) 一种数据帧校验码生成方法和装置
CN1527531A (zh) 一种数据加密标准或三重数据加密标准的实现方法
JP2003324357A5 (zh)
CN102739258A (zh) 一种计算循环冗余校验码的方法及装置
CN107239362A (zh) 一种并行crc校验码的计算方法及系统
CN102356554A (zh) Turbo码数据交织处理方法和用于交织Turbo码数据的交织器
CN114866231A (zh) 一种基于Classic McEliece密码体制的密码系统
CN1281023C (zh) 离散数据分块加密方法
CN1677921A (zh) 通过可编程器件实现数据加密的方法
CN108574490B (zh) 计算循环冗余校验crc编码的方法及装置
CN1258148C (zh) 高安全等级对称密钥算法的加密、解密方法及加密器
CN116722967A (zh) 一种轻量级联合编码的密码实现方法及系统
CN109327276B (zh) 安全编码方法、解码方法及设备
CN114303320B (zh) 使用逆crc生成器多项式进行解码的循环冗余校验crc
CN108628698A (zh) 计算crc编码的方法和装置
CN1411151A (zh) 一种缩短循环码纠错译码算法的集成电路实现方法及电路
CN108566210B (zh) 兼容IEEE 802.11n标准的LDPC编码系统及方法、LDPC编码器
CN102118225A (zh) 基于多索引表的任意位多项式除法类型编码的编解码方法
CN112953563B (zh) 伽罗瓦域编码器中高速并行信号处理实现方法及装置
CN1300391A (zh) 运算处理装置
CN1756091A (zh) 一种Turbo码交织器及其交织方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: CHINA POTEVIO COMPANY LIMITED

Free format text: FORMER OWNER: CHINA PUTIAN INSTITUTE OF TECHNOLOGY CO., LTD.

Effective date: 20090508

C41 Transfer of patent application or patent right or utility model
C56 Change in the name or address of the patentee

Owner name: CHINA PUTIAN INSTITUTE OF TECHNOLOGY CO., LTD.

Free format text: FORMER NAME: CHINA PUTIAN INSTITUTE OF TECHNOLOGY

CP03 Change of name, title or address

Address after: No. two, 6 North Street, Haidian District, Beijing, Haidian

Patentee after: PETEVIO INSTITUTE OF TECHNOLOGY Co.,Ltd.

Address before: No. two, 2 street, Beijing information industry base

Patentee before: POTEVIO Institute of Information Technology

TR01 Transfer of patent right

Effective date of registration: 20090508

Address after: No. two, 2 street, Zhongguancun science and Technology Park, Beijing, Haidian District

Patentee after: CHINA POTEVIO CO.,LTD.

Address before: No. two, 6 North Street, Haidian District, Beijing, Haidian

Patentee before: PETEVIO INSTITUTE OF TECHNOLOGY Co.,Ltd.

CX01 Expiry of patent term

Granted publication date: 20080514

CX01 Expiry of patent term