一种循环冗余校验crc码的实现方法和装置的制作方法

文档序号:7706798阅读:132来源:国知局

专利名称::一种循环冗余校验crc码的实现方法和装置的制作方法
技术领域
:本发明涉及通信系统中的差错控制技术,尤其涉及一种循环冗余校验CRC码的实现方法和装置。
背景技术
:为保证通信系统中数据传输的正确性,需要对通信过程进行差错控制。循环冗余校验(CyclicRedundancyCheck,CRC),由于其编码简单且误判概率很低,是通信系统中常用的差错控制方式。CRC是分组线性码的分支,基本的原理是利用线性编码理论,在发送端根据要传送的k位信息码序列,以一定的规则产生r位校验用的监督码(即CRC码),并附在原信息码序列后边,构成一个新的共(k+r)位的序列,然后将包含了CRC码的新的序列发送出去。在接收端,则根据信息码序列和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。例如,待传送的k位二进制信息码序列为D-{d[p-l]d[p-2]……d[l]d},通过将序列D左移r位,除以一个(r+1)位的生成多项式,得到r位的余式R二(r[r-l]r[r画2]......r[l]r[O]),将余式R作为序列D的CRC码,生成(k+r)位的新的二进制码序列M二{d[p-l]d[p-2]......d[l]dr[r-l]r[r-2]……r[l]r},进行传输。在实际应用中,CRC码可以通过硬件逻辑电路来实现,典型的实现电路有串行电路和并行电路。串行电路计算CRC码时是逐位地进行计算,例如,如图1(a)所示,对于4位的CRC码(CRC-4),首先将四个寄存器清0;然后,把信息序列码元作为输入数据,串行的移位输入,即每个时钟周期输入一个比特信息序列码元。经过4个时钟周期以后,就可以将信息码元的前4比特输入到寄存器中。后续将寄存器中的数据逐位左移并与输入的信息码元异或,计算CRC码。如图1(b)所示,以生成多项式为x^x+l的CRC-4为例,显示了一种无需等待信息码元移入寄存器之后再计算CRC码的串行电路。并行电路的实现是基于上述串行电路的,其原理是由于n位信息码同时输入并行电路所产生的CRC余数与n位信息码逐位输入串行电路产生的CRC余数相同,所以可以认为并行电路和串行电路是等效的,从而根据串行电路中各寄存器和输入信息位的变化可得出并行电路的逻辑关系式。利用并行电路可一次输入n位待传送的信息码,通过多次输入n位信息码最终可以得到该信息码序列的CRC校验码。如图2所示,显示了一种通用的并行电路。在实现本发明的过程中,发明人发现现有技术中至少存在如下问题现有技术中基于线反馈移位寄存器的串行电路每个时钟周期只能移入1比特数据,效率非常低,只能用在对性能要求较低的低速CRC校验电路中,当需要高速的CRC数据校验处理时,串行电路无法满足要求;现有技术中的并行电路进行多位数据并行处理时,随着并行数据位宽的不断增加,并行电路所用到的异或逻辑电路层次也越来越大,导致相应的电路延迟过大,电路的时钟频率越来越低。由于电路的运算性能或数据吞吐率是与电路的时钟频率和数据位宽成正比的,现有技术在增加数据处理位宽时降低了电路的时钟频率,从而无法通过并行数据位宽的线性增加使电路的性能或数据的吞吐率也线性的增加,当需要处理高速CRC数据时,现有技术中的并行电路也是无法满足需求的。
发明内容为解决现有技术中存在的问题,本发明的实施例提供了一种循环冗余校验CRC码的实现方法和装置,能够显著提高实现CRC码时系统的运算性能,满足高速CRC数据处理时的运算需求。为达到上述目的,本发明的实施例采用如下技术方案一种循环冗余校验CRC码的实现方法,所述方法包括对并行输入的信息码进行至少一次异或,且在所述异或过程中进行至少一次流水,获取第一结果;将前一次获得的CRC码进行异或,得到第二结果;将所述第二结果和所述第一结果进行异或,获取当前的CRC码。一种循环冗余校验CRC码的实现装置,所述装置包括信息码异或单元,用于对并行输入的信息码进行至少一次异或,且在所述异或过程中进行至少一次流水,获取第一结果;CRC码异或单元,用于将前一次获得的CRC码进行异或,得到第二结果;CRC码获取单元,用于将所述信息码异或单元获取的第一结果和所述CRC码异或单元获取的第二结果进行异或,获取当前的CRC码。本发明实施例提供的技术方案,能够同时进行多位信息码的并行处理,且在并行处理的过程中通过在信息码异或中进行至少一次的流水,提高了系统的时钟频率,从而达到了随着处理数据位宽的线性增加,系统的运算性能也线性增加的效果,解决了现有技术中串行电路每个时钟周期只能处理单比特数据,而并行电路线性增加了处理的数据位宽后,系统运算性能并未线性增加所带来的问题,本发明提供的技术方案能够显著提高实现CRC码时系统的运算性能,满足高速CRC数据处理时的运算需求。图1(a)为CRC码的一种串行实现电路示意图1(b)为CRC码的另一种串行实现电路示意图2为CRC码的一种通用的并行实现电路示意图3为CRC码的另一种并行实现电路示意图4为本发明实施例提供的一种CRC码的实现方法流程图5为本发明实施例提供的一种实现8比特并行输入的实现电路示意图6为本发明实施例提供的一种CRC码的实现装置结构示意图。具体实施例方式为了更清楚地说明本发明实施例的技术方案,下面将结合附图对本发明的实施例进行详细的介绍,下面的描述仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些实施例获得本发明的其他的实施方式。本发明实施例采用并行电路实现CRC码,本发明实施例提供的并行电路分为数据异或运算电路和CRC异或逻辑电路,参见图3,该并行电路利用数据异或运算电路先将相应的输入数据进行异或,并利用CRC异或逻辑电路将相应的前一次得到的CRC码进行异或,然后将两部分的结果再异或得到当前的CRC码。本发明实施例主要通过在该并行电路的数据异或运算电路部分加入至少一次流水线电路,显著提高了系统的运算性能。为清楚说明本发明实施例的技术方案,以生成多项式为x4+x+l的CRC-4为例来说明上述并行电路的工作原理。由于并行电路和串行电路的等效性,参考图1(b),如果寄存器中的初始数据分别为(dl,d2,d3,d4),输入的彩:据为(al,a2,a3,a4)。从下表中我们可以看到4bits并行输入时,图1(b)所示电路在不同时钟周期中,各寄存器值的变化规律表1寄存器值变化规律表<table>tableseeoriginaldocumentpage6</column></row><table>从上表中可以看到如果输入4bits的数据(al,a2,a3,a4),经过4个时钟周期后,寄存器1至寄存器4中计算得出的CRC码等于输入数据(al,a2,a3,a4)和其初始凄t据(dl,d2,d3,d4)的一组异或值。这时,如果将该CRC码作为寄存器的初始值与后续的4bits数据(a5,a6,a7,a8)进行同样的CRC-4计算的话,再经过4个周期后,寄存器中的结果值也会按照如表l所示相同的规律重复出现。由上所述分析可知,对一个M位的数据序列生成CRC校^r码,在并行计算中每次并行输入N比特的话,能够得到正确的CRC校验码所必须满足的条件是:N能够整除M,即(M+N)=K,K为正整数(当然也可以在最后(M-N")比特后使用(M-N")位的并行CRC运算电路得到最终的CRC校验码)。如表l所示的例子,当输入数据序列是4比特的整数倍时,对于其中每个4比特的计算都可以按照表l中第4个周期时的逻辑关系,通过多个异或运算在一个周期内就计算出来;再将这个结果作为初始值,参与到与后续4比特数据的计算中去,从而实现以4比特为输入的并行计算。当最后4比特的l史据输入后,完成最后一次运算,就可以得到该数据序列的最终的CRC校验值。例如,当输入最初的4比特数据序列时,寄存器l至寄存器4的初始值全为"0",输入数据序列为"1010,1100",首先输入的前面4比特"1010",按照表l中第4个周期时的逻辑关系进行如下计算,得到寄存器l至寄存器4的结果值(Dl,D2,D3,D4):Dl<=dl@d2ala2=0010=1D2<=d2d3@a2a3=0001=1D3〈二dld3@d4ala3a4=0e0@0lle0=0D4<=d4@dlala4=001@0=1然后再输入"1100",按照同样的方法计算Dl<=dld2ala2=1@111=0D2<==d2@d3a2a3=1010二OD3<=dld3d4ala3a4=101100=1D4<=d4dlala4=1110=1通过上述计算,得到最后的CRC码为0011。对上述的计算的规律,可以得到Dl<=dld2ala2等效于Dl<=(dld2)@(ala2)D2<=d2d3a2@a3等效于D2<=(d2d3)(a2a3)D3<=dld3d4ala3a4等效于D3<=(dld3d4)@(al@a3a4)D4<=d4dlal@a4等效于D4<=(d4@dl)(al@a4)从而,并行电路可分为数据异或运算电路和CRC异或逻辑电路,实现CRC码时首先在数据异或运算电路对输入数据进行异或,在CRC异或逻辑电路对前一次CRC码进行异或,再将两者的结果进行异或得到当前的CRC码。本发明实施例基于上述的并行电路提供了一种循环冗余校验CRC码的实现方法,所述方法包4舌步骤T1:对并行输入的信息码进行至少一次异或运算,获取第一结果,其中在所述运算过程中要进行至少一次流水;在本发明实施例首先对输入的信息码进行至少一次异或运算并在该异或中加入至少一次流水。该异或运算可直接采用异或器进行异或运算,但不限于此,也可采用与、或、非组合的逻辑运算达到相同的异或结果,优选的,本发明实施例采用直接进行异或运算。这里的信息码,指利用CRC码的生成多项式确定的当前需要进行异或的信息码,例如,对上述例子,当第一次并行输入4bits信息码(al,a2,a3,a4)时,寄存器1中确定的当前需要进行异或的的信息码为al和a2,对al和a2进行异或运算并在异或中进行流水,得到第一结果。这里的运算可以包括一次或多次运算,当并行输入的信息码位数较多时,需要进行多次异或运算,在多次异或运算的过程中加入至少一次的流水。通过在信息码的异或过程中直接加入至少一次流水,可显著提高系统的时钟频率,从而有效提高了系统的运算性能。这种方式尤其适用于并行处理位数较多的复杂CRC码运算电路。可选的,本发明实施例提供的方法还包括将所述获取到的第一结果进行至少一次流K。根据系统的需要,可将上述获取的第一结果,再进行至少一次流水,对进行流水的次数不做限制,可根据系统的具体情况进行设置,例如,当并行电路的时钟频率降低的程度很大时,可设置多次流水,以提高系统性能。进一步的,对逻辑层次较少的CRC运算,本发明实施例还包括对上述信息码只进行相应的异或运算,对异或运算的结果进行至少一次流水,将获得的结果作为第一结果。这种方式也能够提高系统的时钟频率,适用于并行处理位数较少的CRC码运算电路。应当注意到,这里的流水只是针对信息码,即只对并行电路的数据异或运算电路中加入流水,这是因为对CRC异或逻辑电路需要利用前一次的CRC码运算结果,即该部分电路存在一个反馈的环路,不能加入流水,且CRC异或逻辑电路随着并行输入信息码位宽的增加不会影响系统运算的性能。且在进行流水时,考虑到实现电路中在一个存储单元后,如寄存器后,直接进行流水,如接入已寄存器进行流水,并不能提高系统的时钟频率,在进行流水之前需先进行一次异或运算处理。步骤T2:将前一次获得的CRC码进行异或,得到第二结果;这里的前一次获得的CRC码也是指利用CRC码的生成多项式确定的当前需要进行异或的前一次获得的CRC码,例如,对上述例子,当第二次并行输入4bits信息码(a5,a6,a7,a8)时,寄存器1中确定的当前需要进行异或的前一次获得的CRC码为dl和d2。步骤T3:将所述第二结果和所述第一结果进行异或,获取当前的CRC码。当前CRC码是上述获取的第一结果和第二结果的异或值。由于插入流水会导致数据运算结果延迟一个时钟周期,因此为了保证各异或运算之间数据计算结果在时间上的同步,必须对涉及并行输入的所有异或运算电路都加入相同级数的流水。这时,本发明实施例还包括直接对确定的并行输入的信息码进行至少一次流水;利用所述流水后的信息码与确定的前一次获得的CRC码进行运算,以获取到同步的当前的CRC码。下面以8位宽的CRC-16(生成多项式为x16+x15+x2+l)为例来详细说明本发明实施例提供的这种可以添加流水线电路的并行CRC运算电路。首先根据上述内容,给出并行8位CRC-16的逻辑关系表达式如下,其中并行输入的信息码可以表示为d[7:0];前一次计算的CRC码或初值表示为c[15:0],当前计算的CRC校验值为next—crc[15:0],输出的最终CRC码为c—out[15:0],用"A"符号代表异或运算<formula>formulaseeoriginaldocumentpage9</formula>next—crc[3]:d[2rd[l]'c[9rc[10];next—crc[4]=d[3rd[2rc[10rc[ll];next—crc[5]=d[4rd[3rc[lire[12];next—crc[6]=d[5rd[4]'c[12rc[13];next—crc[7]=d[6rd[5]-c[13rc[14];next—crc[8]=d[7rd[6rc;next—crc[9]=d[7]~c[l]-c[15];next—crc[10]=c[2];next—crc[ll]=c[3];next—crc[12]=c[4];next—crc[13]=c[5];next—crc[14]=c[6];next—crc[15]=d[7]'d[6]'d[5]-d[4]'d[3]'d[2]'d[l]~d'c[7]'c[8]'c[9]'c[10rc[ll]'c[12rc[13]—c[14rc[15]。以CRC码中的一位next—crc[O]为例进行说明。根据上述关系式,确定对next—crc需要并行进行异或运算的信息码包括d至d[7],在该信息码的异或过程加入至少一次流水,例如,对一次流水,可先对d至d[7]中的部分信息码进行异或,如对d至d[4]进行异或,将异或结果进行一次流水后,再与剩余的信息码,如d[5]至d[7]进行异或。若存在多次流水,可将确定的信息码分成多个部分,多次进行异或。本发明实施例提供了一种实现上述CRC码的逻辑电路示意图,如图5所示,图中的方框所示部分可由寄存器来实现,该并行电路主要通过寄存器和异或器实现,其中,由于并行电路中数据异或运算电路的最深层次为3层,层次较少,所以可以在整个数据异或运算电路部分加入一级流水从而提高系统的性能。图5示出了先对输入的信息码全部进行异或之后,加入一级流水时的情况,这里并不对实现电路的具体结构及电路中的具体器件进行限制,可根据本发明实施例提供的方法采用任何可行电路实现CRC码。应当注意到,为保证输入数据的同步性,在图5中的实现next—crc[9^d[7rc[irc[15]的运算中,虽然涉及的输入信息码只有d[7],但同样也需要插入一级流水线电路,从而满足同步要求。本发明实施例提供的技术方案,能够同时进行多位信息码的并行处理,且在并行处理的过程中通过在信息码异或中进行至少一次的流水,提高了系统的时钟频率,从而达到了随着处理数据位宽的线性增加,系统的运算性能也线性增加的效果,解决了现有技术中串行电路每个时钟周期只能处理单比特数据,而并行电路线性增加了处理的数据位宽后,系统运算性能并未线性增加所带来的问题,本发明提供的技术方案能够显著提高实现CRC码时系统的运算性能,满足高速CRC数据处理时的运算需求。本发明实施例还提供了一种CRC码的实现装置,如图6所示,所述装置包括信息码异或单元61,用于对并行输入的信息码进行至少一次异或,且在所述异或过程中进行至少一次流水,获取第一结果;CRC码异或单元62,用于将前一次获得的CRC码进行异或,得到第二结果;CRC码获取单元63,用于将所述信息码异或单元61获取的第一结果和所述CRC码异或单元62获取的第二结果进行异或,获取当前的CRC码。进一步的,上述装置还包括流水单元64,用于将所述信息码异或单元61获取的第一结果进行至少一次流水。上述CRC码的实现装置可由具体的硬件电路实现,例如,信息码异或单元可由异或器和寄存器来实现、CRC码异或单元及CRC码获取单元可由异或器来实现,流水单元可由寄存器来实现,图5示出了一种8位宽并行输入时一级流水的实现电路,上述装置中个功能模块的具体工作方式参见本发明方法实施例。本发明实施例提供的技术方案,能够同时进行多位信息码的并行处理,且在并行处理的过程中通过在信息码异或中进行至少一次的流水,提高了系统的时钟频率,从而达到了随着处理数据位宽的线性增加,系统的运算性能也线性增加的效果,解决了现有技术中串行电路每个时钟周期只能处理单比特数据,而并行电路线性增加了处理的数据位宽后,系统运算性能并未线性增加所带来的问题,本发明提供的技术方案能够显著提高实现CRC码时系统的运算性能,满足高速CRC数据处理时的运算需求。通过程序指令相关硬件完成。所述实施例对应的软件可以存储在一个计算机可存储读取的介质中。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。权利要求1、一种循环冗余校验CRC码的实现方法,其特征在于,所述方法包括对并行输入的信息码进行至少一次异或,且在所述异或过程中进行至少一次流水,获取第一结果;将前一次获得的CRC码进行异或,得到第二结果;将所述第二结果和所述第一结果进行异或,获取当前的CRC码。2、根据权利要求1所述的方法,其特征在于,所述方法还包括对所述第一结果进行至少一次流水。3、根据权利要求1所述的方法,其特征在于,所述方法还包括利用CRC码的生成多项式确定所述信息码和CRC码。4、一种循环冗余校验CRC码的实现装置,其特征在于,所述装置包括信息码异或单元,用于对并行输入的信息码进行至少一次异或,且在所述异或过程中进行至少一次流水,获取第一结果;CRC码异或单元,用于将前一次获得的CRC码进行异或,得到第二结果;CRC码获取单元,用于将所述信息码异或单元获取的第一结果和所述CRC码异或单元获取的第二结果进行异或,获取当前的CRC码。5、根据权利要求4所述的装置,其特征在于,所述装置还包括流水单元,用于将所述信息码异或单元获取的第一结果进行至少一次流水。全文摘要本发明公开了一种循环冗余校验CRC码的实现方法和装置,涉及通信系统中的差错控制技术,能够显著提高实现CRC码时系统的运算性能,满足高速CRC数据处理时的运算需求。本发明实施例提供的CRC码的实现方法包括对并行输入的信息码进行至少一次异或,且在所述异或过程中进行至少一次流水,获取第一结果;将前一次获得的CRC码进行异或,得到第二结果;将所述第二结果和所述第一结果进行异或,获取当前的CRC码。本发明适用于任何需要以硬件方式实现CRC码的领域中。文档编号H04L1/00GK101527615SQ20091013268公开日2009年9月9日申请日期2009年4月7日优先权日2009年4月7日发明者张玉琳申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1