CN1171389C - 用于生成循环冗余校验代码的并行循环冗余校验生成电路 - Google Patents

用于生成循环冗余校验代码的并行循环冗余校验生成电路 Download PDF

Info

Publication number
CN1171389C
CN1171389C CNB998126535A CN99812653A CN1171389C CN 1171389 C CN1171389 C CN 1171389C CN B998126535 A CNB998126535 A CN B998126535A CN 99812653 A CN99812653 A CN 99812653A CN 1171389 C CN1171389 C CN 1171389C
Authority
CN
China
Prior art keywords
output
register
crc
line
input
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.)
Expired - Fee Related
Application number
CNB998126535A
Other languages
English (en)
Other versions
CN1324517A (zh
Inventor
G��÷����
G·梅斯贝格
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.)
Telefonaktiebolaget LM Ericsson AB
Original Assignee
Telefonaktiebolaget LM Ericsson AB
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 Telefonaktiebolaget LM Ericsson AB filed Critical Telefonaktiebolaget LM Ericsson AB
Publication of CN1324517A publication Critical patent/CN1324517A/zh
Application granted granted Critical
Publication of CN1171389C publication Critical patent/CN1171389C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related 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
    • 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
    • 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/65Purpose and implementation aspects
    • H03M13/6575Implementations based on combinatorial logic, e.g. Boolean circuits

Landscapes

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

Abstract

本发明涉及一个并行CRC生成电路,该电路包括一个输入寄存器装置(I),一个输出寄存器装置(C),一些XOR门(XOR1-XORN)和一个联接装置(CM),CM将输出寄存器装置(C)的输出线(C0-CN-1)及输入寄存器设备(I)的输出线(I1-In)中的一些预定线作为输入输送给各XOR门。按本发明,建立并计算一个矩阵,该矩阵代表基于所选CRC多项式的状态改变,这样,联接装置(CM)只使用最小数量的输出线反馈和输入寄存器装置(I)的输出线前馈。从而,本发明的并行CRC计算电路无冗余并使用最少量的硬件。

Description

用于生成循环冗余校验代码的 并行循环冗余校验生成电路
本发明大体关于一个CRC(循环冗余校验)的生成,在从一个发射机向一个接收机发射数字数据时,CRC用于校验误差。CRC可以有不同的长度,并在发射机中被加入到用户数据中。在接收机中,该CRC数据与根据所接收用户数据再生成的CRC数据比较。若两个所生成CRC匹配,则说明在发射机和接收机间的传输过程中未出现严重的传输误差。
CRC代码的生成是一项标准技术且在以前的技术中,串行或并行生成该CRC代码的电路都是已知的。如以下将详细解释的那样,现有一些设计工具用来设计这类串行和并行生成电路。不过,迄今为止,还不知道这种用于并行CRC生成电路的设计工具未将馈线中的冗余考虑在内。即,若有比实际必需更多的馈线用于执行并行CRC生成,则硬件数量增加了且并行生成CRC位的速度降低了。
具体地,本发明有关怎样减少并行CRC生成电路中的冗余这一问题。
在设计一个用来生成一个长度为N的CRC代码的CRC生成电路时,使用了一个CRC多项式CRCN,它通常是由以下公式(1a)定义的:
CRCN=aNxN+aN-1xN-1+…anxn+…a1x1+a0x0    (1a)在公式(1a)中,系数aN=1,a0=1,且根据要生成的CRC代码,系数an,n=1,…,N-1为0或1。图1a显示了根据公式(1a)中的CRC多项式实现的一个串行CRC生成电路的原理。CRC生成电路由N个串行连接的移位寄存器C0,C1,…Cn,…,CN-1组成。还有N个XOR门XOR1,…XORn,…XORN-1,XORN。一个位流SI被串行输入到XOR门XORN中。实质上,根据公式(1a)中N和an的选择,在每两个移位寄存器Cn,Cn-1间提供XOR门。根据从XOR门XORN到各单独的移位寄存器(触发器)C的反馈,从末极移位寄存器CN-1输出一个要求的CRC代码。
这样,设计者通过挑选反馈来选择要生成的CRC代码,即,根据所要求的CRC代码,选择N并选择哪个系数an为0或1。在图1a的电路中,系数an的选择受反馈及每两个移位寄存器间***的具体的XOR门的影响。
图1a中电路的操作如下。X位(例如100)输入位流SI在序贯时钟周期串行输入XOR门XORN。随后,存储在序贯移位寄存器中的CRC代码被串行读出。这就是说,在利用X个时钟周期将X个比特输入CRC电路后,必须使用另外N个时钟周期串行读出所生成的CRC代码。然后,读出的CRC代码串行附加在X位的用户数据上,一起发送给接收机。
所以,利用图1a中的串行CRC生成电路,总是需要另外的N个时钟周期来读出所生成的CRC代码,这增加了生成和发射CRC代码的处理时间。
图1b示出了一个特殊CRC13代码的串行CRC电路。即,在图1b中,多项式的选择为:
CRC13=X13+X12+X7+X6+X5+X4+X2+1               (1b)这样,在图1b的电路中,N=13,a13=a12=a7=a6=a5=a4=a2=a0=1。CRC多项式中这些系数的选择反映在电路结构上,从移位寄存器C12到其它移位寄存器C0-C11,通过各个移位寄器C之间的相应XOR门反馈。在图1b中,X个比特被串行输入之后,长度为13的CRC在“CRC13串行输出”端被串行输出。
由于在图1a和图1b的电路中,处理过程是串行执行的,所以处理时间增加。一种替换的解决方法是为一个T位的数据包并行地生成CRC代码,该T位的数据包是X串行位的一个并列部分。图1c示出了一个并行CRC生成电路的总的结构。
在图1c中,一个输入寄存器装置I具有T个输入寄存器I0,I1,…,It…IT-1,用来同时存储所提供的T个输入位。每个输入寄存器都有一条输出线路I(0),I(1),…I(t)…I(T-1),连接到一个联接装置CM上。一个输出寄存器装置C有N个输出寄存器C0,C1,…,Cn…CN-1,用来并列存储所生成的CRC代码。输出寄存器中的每一个都有一个输入线路C0(T),C1(T),…,Cn(T)…CN-1(T),和一个输出线路C0(0),C1(0),…,Cn(0)…CN-1(0)。进一步,还提供有N个并行XOR门XOR0,XOR1…XORn…XORN-1,每个门都有一个连接在输出寄存器的相应输入线路上的输出线路,和一些与联接装置CM连接的输入线路。各输出寄存器的输出线路也输入给联接装置CM。
图1c中的并行CRC生成电路的操作如下:从X位的数据流中,向输入寄存器装置I并行输入T位。联接装置CM确定来自输入寄存器装置I中的哪条输出线及来自输出寄存器C的哪条输出线要被输入给各XOR门。联接装置并不“联接”输入寄存器的输出和输出寄存器的输出,而只是确定XOR门的哪条输入线路必须接收来自各输入和输出寄存器的独立的输入。在一个时钟周期内,输出寄存器C包含一个并行生成的CRC代码。然后,在下一个时钟周期,下一组T个输入位被输入到输入寄存器装置I中。随后,它们与输出寄存器保存的以前的CRC代码相结合,被输入到XOR门。这样,对于每T个输入位,只需要一个时钟周期来并行地生成CRC代码。与图1a和图1b中的串行电路相比,串行生成CRC代码需要占用大量时间,所以是不期望的,图1c中的并行生成电路可以在一个时钟周期内为数量为T的输入位生成CRC值。
不过,通常来说,用来确定输入和输出寄存器中的哪条输出线路需被作为输入提供给各XOR门的联接装置CM的设计并非是一项无用工作。即,以前在串行输入寄存器中利用内部状态移位所做的工作,现在在图1c中,需要在一步中并行执行。对于一个给定的多项式和CRC长度,常规的设计工具模拟一个串行CRC电路以找出串行移位寄存器中的各项是怎样逐次随着T位的输入而改变的。根据这些模拟确定联接设备。
发明者近来为以这样一种方式设计(即开发并生成)并行CRC电路进行了模拟,并且发现了这样的问题,即,常规联接设备CM的缺点是使用了太多来自输出寄存器的反馈。即,由于常规模拟工具逐个检查串行CRC电路的每次触发(移位寄存器),所以发现,它们不能检测到存在一个可能冗余,即,有太多来自输出寄存器的反馈或太多输入寄存器I的输出线路被输入到XOR门中。这一冗余增加了并行CRC生成电路中所需的处理时间和硬件数量。这样,根据所用多项式,有些信号的反馈实际上是多余的,而到目前为止,设计工具还未将它们认为是不必要的。
本发明是基于这样的认识的,即,根据所用多项式,并非所有的反馈及所有来自输入寄存器的输出都必须作为XOR门的输入,并且,在并行计算CRC时,只需考虑存储在输出寄存器中的一些以前存储值就足够了。
这样,发明者发现了一个不为人知的问题,即
提供一种方法和一个并行CRC生成电路,它能在减少实现并行CRC生成电路所需的硬件数量的同时,得到更高的处理速度。
本发明通过以下方法及并行CRC生成电路,可以解决该问题。本发明提供了一种用来设计一个并行CRC生成电路的方法,该电路用于为一个数据流的T个输入位并行生成一个长度为N,定义为一个CRC多项式(CRC)
CRC=aNxN+aN-1xN-1+…anxn+…a1x1+a0x0            (1a)的CRC代码,多项式中,aN=a0=1,并且,根据要生成的CRC代码,系数an取值为0或1,该方法包括以下步骤:
d)确定以下线路的联接:
-一个有T个输入寄存器用于同时存储所述T个输入位的输入寄存器装置的输入寄存器输出线路,每个输入寄存器都有一个输出线,和
-一个有N个输出寄存器用来同时存储所述CRC代码的输出寄存器装置的输出寄存器输出线路与
-N个XOR门的输入线路,每个XOR门都有一个连接到所述输出寄存器的相应输入线路上的输出,和与预定数量的所述输入寄存器输出线及预定数量的所述输出寄存器输出线相连的输入线路;
上述确定联接是通过以下步骤进行的:
e1)在一个存储器中存储一个有N列T+1行的矩阵CT:
其中,0行中的行元素ct0,0,ct0,1,…ct0,n…ct0,N-1分别存储
N个输出寄存器输出线的索引;且
其中,an=0的列号n的列元素存储一个任意的非读出值,该
值表明在生成联接组时不考虑该值,an=1的列号n的列元素存储
下列值对:
ctT,n=iT-1=(I(T-1),CN-1(T-1))
ctT-1,n=iT-2=(I(T-2),CN-1(T-2))
    .
    .
    .
ctt,n=it-1=(I(t-1),CN-1(t-1))
    .
    .
    .
ct1,n=i0=(I(0),CN-1(0))             (2)这里,所述对中的第一个值标记一个输入寄存器输出线,所述值对中的第二个值标记一个输出寄存器状态参数,且值CN-1(0)标记第n-1个输出寄存器输出线的输出线;
e2)为N个XOR门中的每一个确定输入寄存器的输出线的索引和输出寄存器的输出线的索引,作法如下:
e21)挑选一个号码为n[0,N-1]的XOR门;
e22)从矩阵CT中读元素对ctT,n及从该元素开始对角线方向上行列号递减的所有元素对,并将它们列入一个联接组gn中;
e23)若联接组gn包含有t≠0的输出寄存器状态参数CN-1(t),则读取与该输出寄存器状态参数相对应的元素对ctt,N-1,t≠0,及从该元素对开始对角线方向上行列号递减的所有元素对,并用这些值替换联接组中的输出寄存器状态参数;
e24)重复所述读出步骤e23,直到所述联接组gn中不再存在输出寄存器状态参数,并在替换过程的中间阶段或在所有输出寄存器状态参数都已被替换之后,删除相同的输入寄存器输出线索引和相同的输出寄存器输出线索引;并
e25)对所有N个XOR门重复步骤e21-e24,以生成N个联接组;
e26)其中,每个XOR门的每个联接组gn都指明要被连接到相应的XOR门输入端上的输入寄存器输出线和输出寄存器输出线。
本发明还可以提供一个并行CRC生成电路,用于为一个数据流的T个输入位并行生成一个长度为N的CRC代码,该代码定义为一个CRC多项式(CRC)
CRC=aNxN+aN-1xN-1+…anxn+…a1x1+a0x0         (1a)其中aN=a0=1,且根据要生成的CRC代码,系数an取值为0或1,该电路包括:
a)一个有T个输入寄存器的输入寄存器设备,用于同时存储所述T个输入位,每个输入寄存器都有一条输入线;
b)一个有N个输出寄存器的输出寄存器设备,用于同时存储所述CRC代码,每个所述输出寄存器都有一条输入线和一条输出线;其特征在于:
c)N个XOR门中的每一个都有一个与所述输出寄存器的相应输入线相连的一个输出,和与预定数量的所述输入寄存器输出线及预定数量的所述输出寄存器输出线相连的输入线;以及
d)按照上述设计方法中步骤d),e1),e2),e21)-e26)所确定的连接方法,将输入寄存器输出线和输出寄存器输出线与所述XOR门的输入线相连。
按本发明,在一个存储器中存储了一个两维(时间-空间)矩阵,该矩阵表示对于一个给定的CRC多项式,一个串行移位寄存器的所有项是怎样改变的。在该矩阵表达式中存储了一些标记,这些标记实质上代表了内部状态及由所选多项式表示的内部状态的改变。可以看到,它等价于一个相应的串行CRC生成电路的内部状态(存储在移位寄存器中的值)的改变。
一个专用搜索技术被用来估算该矩阵表达式,以删除对同一位出现两次的内部状态转换。即,该搜索方法以这样一种方式来估算矩阵表达式,即,在并行电路中要同时输入到一个XOR门中的内部状态或输入位被取消,这是因为,两个相同状态的XOR组合(输入寄存器输出线路或输出寄存器输出线路)不会导致相应的XOR门的输出信号的改变。基于这一认识,删除掉不会导致输出信号中的改变的输入位和/或来自输出寄存器的反馈。由于减少了来自输出寄存器的反馈的数量及来自输入寄存器的输入数量,所以降低了处理时间及并行CRC电路所需的硬件数量。
只计算串行CRC电路中每个串行移位寄位器的内部状态的常规设计工具不能识别出这种对XOR门的两次输入值,这是因为它们只单独地计算每个串行移位寄存器中的状态。所以,本发明在处理时间和硬件数量减少方面提供了显著的优点。
用于自动生成一个并行CRC生成电路的方法,该方法能为任何所期望CRC代码(预定CRC多项式)提供并行CRC电路。
此外,按照本发明的另一实例,该方法自动生成一个制造ASICs或FPGAs所需的VHDL代码。然后,该方法输出的代码将被用于加载相应的FPGA。这样得到的ASICs和FPGAs将有一个大大提高了的处理速度和一个减少了的硬件数量。
本发明可被用于任何通信或传输***中,其中,被发射的CRC代码必须快速生成。
本发明的其它优点和改进列在附加权利要求中。以下,将参照附图中举例说明的实施例和例子,描述本发明。在图中,相同或相似的参考符号代表相同或类似的部分。
图1a描述了一个通用CRC多项式的常规串行CRC生成电路;
图1b描述了一个常规串行CRC生成电路的例子,用于生成一个长度为13的所选CRC代码;
图1c示出了一个按以前技术,使用一个联接装置CM的一个并行CRC生成电路的总体结构;
图2a示出了一个N列T+1行的矩阵CT的方案及本发明方法所使用的矩阵元素Ct;
图2b示出了在图1b中的串行CRC生成电路所使用的多项式的情况下,为获得降低冗余度的并行CRC电路所用的矩阵CT;
图2c是一个表,举例说明了利用图2b的多项式,输入寄存器I的哪个输出和输出寄存器C的哪个输出被用作每个XOR门的输入(故该表对应于图1c中的联接装置),所述表是图2b的结果;
图3示出了按本发明,利用图2c中的表,为图1b中的例子设计的并行CRC生成电路;
图4示出了按本发明的方法的一个原理性流程图。
按本发明的并行CRC生成电路的总体结构如图1c所示。并行生成电路生成一个长度为N的CRC代码,该代码正如按上面所述公式(1a)的相应的CRC多项式所定义的那样。
也就是说,一般,本发明的并行CRC生成电路包括一个具有T个输入寄存器I0,I1,…It…,IT-1的输入寄存器设备,用于同时存储所述T个输入位,每个输入寄存器都有一个相应的输出线I(0),I(1),…I(t)…,I(T-1)。
一个输出寄存器装置C有N个输出寄存器C0,C1,…Cn,…CN-1,用于同时(并行)存储所述CRC代码,每个所述输出寄存器C都有一条输入线路C0(T),C1(T),…Cn(T)…CN-1(T)和一个输出线路C0(0),C1(0),…Cn(0),…CN-1(0)。
提供有N个XOR门XOR0,XOR1,…XORn…XORN-1,每一个都有一个输出线,与所述输出寄存器的相应的输入线路相连,并有输入线,与预定数量的所述输入寄存器输出线及预定数量的所述输出寄存器输出线相连。
联接装置CM确定哪条输入寄存器I的输出线及哪条输出寄存器C的输出线被输入给各XOR门。
本发明方法包含如图4所示的下列步骤。在S1步,根据CRC多项式的一般公式(1a),挑选N值并定义哪个系数an,n=0,…N-1为0或1,以此来挑选所需CRC代码的长度N及CRC代码的类型。另外,在S1步,确定数据包T的长度,即要被并行处理的位数。这样,就为电路确定了输入寄存器输出线及输出寄存器输出线的数量。
在S2步,根据所选N,T和an值,图2a所示矩阵CT被存入存储器中。矩阵CT有编号为C0,C1,…Cn…CN-1的N列和编号为t0,t1,…t…T的T+1行。
第一行t0中的行元ct0,0,ct0,1,…ct0,n…ct0,N-1分别存储输出寄存器输出线C0(0),C1(0),…Cn(0),…CN-1(0)的号码(即一个标识参数)。
an=0的列Cn的列元ct(例如,若a3=0,则所讨论的为列C3的列元)存储一个值0(即,它们是“未定义”的并假设当该矩阵被看作是状态的时-空表示时,在下一个时钟周期,对角线上该状态左下方的下一个状态按CRC多项式所要求的那样改变,例如,在一个串行CRC生成电路中),并且,an=1的列元Cn(例如,若a4=1,则所关心的是列C4的列元)存储按照公式(2)的值组:
ctT,n=iT-1=(I(T-1),CN-1(T-1))
ctT-1,n=iT-2=(I(T-2),CN-1(T-2))
        .
        .
        .
ctt,n=it-1=(I(t-1),CN-1(t-1))
        .
        .
        .
ct1,n=i0=(I(0),CN-1(0))         (2)
        .
        .
        .所述对中的第一个值标记一个输入寄存器的输出线,所述对中的第二个值标记一个输出寄存器状态参数,且值CN-1(0)标记输出寄存器CN-1的输出。
每个元素ctt,n都有三种可能的输入:
1)左下元素ctt-1,n-1,由一个对角线箭头表示,它用于存在一个左下元的所有情况(最左列和底行除外);
2)输出寄存器的一个现有输出Cn(0),它只用于最底行;
3)一个馈线(是输入寄存器It-1的输出I(t-1)和输出寄存器CN-1(t-1)的XOR组合),由it-1表示,它用在CRC多项式中系数an=1和存在馈线it-1的情况下(当然不是在最低行)。
由此,填写矩阵(见图2b中的例子)。
在第S31步,挑选号码为n的一个XOR门(如图1c可见,n介于0和N-1之间),即,估算矩阵CT以确定哪条输出寄存器输出线和输入寄存器输出线要被输入XOR门XORn
在第S32步,挑选矩阵CT的元素ctT,n(该元素位于顶行T和列n)。然后,沿对角线方向左下直到最低行或最左列并收集该线上的所有元素(即,iT-1,it…Cn(0),构造联接组gn。所有it都将由I(t)XORCN-1(t)代替,故CN-1(t)等同于ctt,N-1
然后,在S33步,检查联接组gn是只包含输入寄存器输出线路I(t)和输出寄存器输出线的指示或“初始状态”Cn(0)(即,在该点,已经清楚XOR门XORn的输入是怎样形成的),还是也包含输出寄存器状态参数ctt,n(即,在一个串行CRC生成电路中会出现的状态,但该状态是在一个不同的时钟周期内出现的,即不是在时钟周期0)。若在第S33步,发现联接组gn中包含有输出寄存器状态参数ctt,n,且t≠0,则它们必须被替换,这是因为在联接组中,它们既不代表输入寄存器的输出线路也不代表输出寄存器的输出线路。这一替换是在第S34步执行的。
在第S34步,对应于所发现输出寄存器状态参数的元素ctt,n(t≠0,此处n总为N-1)及从该点出发沿对角线方向上递减行列号的所有元素均被读出,且联接组中的输出寄存器状态参数由这些值代替。在这里,“对应于”的意思是,当,例如,元素包含输出寄存器状态参数CN-1(T-1)时,则位于N-1列T-1行的元素及其左下方沿对角线的所有元素都被读出并作为一个新的值组序列替换联接组gn中的相应的输出线状态参数。
随后,重复所述替换步骤S34和所述检查步骤S33,直到在所述联接组gn中再没有输出寄存器状态参数为止。这样,联接组只包含输入寄存器输出线I(t)和输出寄存器输出线Cn(0)的标志。
在第S35步,联接组gn中相同的输入寄存器输出线号和相同的输出寄存器输出线号的对被删除。这一步骤也可在替换的中间阶段执行,这是因为,在中间阶段,联接组中可能已包含了相同值。
对所有N个XOR门重复步骤S31-S35以生成N个联接组gn。在第S36步,联接组gn可以在一个屏幕上输出,或可被一个自动设计制造设备当作一个实际VHDL码用于ACISs和FPGAs(ASIC:专用集成电路;FPGA:现场可编程门阵列)。
这样,经过与存储器中专门设定的矩阵有关的替换和删除步骤,为每个XOR生成的每个联接组gn都表明连接到相应XOR门的输入端的输入寄存器输出线路和输出寄存器输出线路。
由图2a可见,本质上,矩阵CT是一个串行CRC生成电路的移位寄存器中的项怎样从一个时钟周期到另一个时钟周期改变(序贯地实现所选CRC多项式)的实际表示。按照本发明,当用本发明方法估算这类连续状态改变的表示(时-空)时,能够检测到所有冗余,即同一位在从输出反馈时将被再次输入给同一XOR门的情况。这样,图2a中矩阵CT的估算能够允许检测到所有在并行CRC电路中应避免的冗余。从而,根据所得到联接组gn实现的电路具有提高了的处理速度并只需少量硬件。
以上参照图4所述的方法是通用的,不会错过任何冗余。其通用性在于,它能够为N,an和T的任何选定值设计优越的并行CRC生成电路。
以上所述方法可以与一个输出VHDL代码的设计工具一起使用,以制造一个ASIC或为一个FPGA设备编程。换句话说,一个用来自动生成CRC电路的设计工具,可以仅凭用户输入的参数N,an和T及所得到的联接组制造最佳CRC电路并自动生成实际设备,例如,通过输出VHDL代码,该代码反映该并行CRC电路中所有输入和输出线路的互连。
为说明本发明方法,以下将介绍怎样生成与串行CRC生成电路和图1b中的多项式相对应的无冗余的并行CRC生成电路。
图2b示出了图1b中所示情况的联接矩阵CT。图3显示了在对图2b所示矩阵CT应用本发明方法之后,相应的并行CRC生成电路。
对于公式(1a)所定义的多项式CRCN,选择N=13,且a13=a12=a7=a6=a5=a4=a2=a0=1。选择要并行处理的位T的数量为T=8。如图3所表明的,这种选择使得输入寄存器装置I具有8个输入寄存器I0-I7,用于同时存储一个T=8输入位的数据包。如图3所示,输入寄存器I0-I7的输出线标记为I(0)-I(7)。因此,图2b中的矩阵CT有T+1=9行,记为t0-t8。
由于N=13,所以输出寄存器装置C有13个输出寄存器C0-C12,用于同时存储CRC13代码。输出寄存器有相应的输入线C0(8)-C12(8)和相应的输出线C0(0)-C12(0)。这样,图2b中的矩阵CT包含13列,记为C0-C12
N=13个XOR门记为XOR0-XOR12,每个都有一个相应的输出,连接到输出寄存器的一个相应输入线路上,并有一些输入线,与预定数量的所述输入寄存器输出线路和预定数量的所述输出寄存器输出线路相连。
矩阵CT的底行t0的行元素分别存储各输出寄存器输出线路C0(0)-C12(0)的一个表示参数。
由于对于所选CRC13代码,a1=a3=a8=a9=a10=a11=0,所以列C1,C3,C8,C9,C10,C11中的列元素只保留对角项作为参数。另一方面,C0,C2,C4,C5,C6,C7,C12的列分别包含一个值对,因为对这些列,an=1。在图2b中,使用了简写i0-i7,不过,事实上,这些列元中的每一个都存储一个如图2b中矩阵右侧的表所列的值。该表中的“X”表示这两个值共同属于一个联接组(事实上,查看图1b中相应的串行结构,值对i0-i7对应于在不同时钟周期0-7,来自各输入寄存器I0-I7的各串行输入位与来自最后的串行移位寄存器C12的输出的XOR组合)。所定义的输出寄存器状态参数为值C12(7),C12(6),C12(5),C12(4),C12(3),C12(2)和C12(1),而C12(0)表示输出寄存器C12的一个实际输出寄存器线号。
列n=0,n=2,n=4,n=5,n=6,n=7,n=12(即C0,C2,C4,C5,C6,C7,C12)都包含相同的元素,例如,第一列(列号C0)的元素列为:
ct8,0=i7=(I(7),C12(7))
ct7,0=i6=(I(6),C12(6))
ct6,0=i5=(I(5),C12(5))
ct5,0=i4=(I(4),C12(4))
ct4,0=i3=(I(3),C12(3))
ct3,0=i2=(I(2),C12(2))
ct2,0=i1=(I(1),C12(1))
ct1,0=i0=(I(0),C12(0))
ct0,0=C12(0)包含定义值an=1的其它列包含相同值。在已用过的标记中,数对中的第一个值标志一个输入寄存器输出线,第二个值标记一个输出寄存器状态参数且C12(0)标记输出寄存器号12的输出寄存器输出线C12,如图3所示。C12(0)也可被认为是初始状态下输出寄存器C12的输出寄存器状态参数。
在如图2b安排了矩阵CT之后,为举例说明,箭头表示在一个串行CRC生成电路中,状态怎样随每个时钟周期改变。于是,如前面所说明的那样,图2b中的矩阵CT是串行CRC生成电路中状态根据所选多项式改变的一种实际时-空表示,只是在图3(和图2a)中,为所有状态改变同时生成表达式,并例证了比特从移位寄存器到移位寄存器,包括如图1b所示的相应的XOR连接,的序贯移位。应指出的是,一旦选定了N,T和an值,图2b中的联接矩阵可被完全设定。
以下,将讨论按本发明方法,在图2b所设定的矩阵中,怎样生成输出寄存器C4的最终联接组g4
n=4号XOR门,即元素ctt8,c4或t8行C4列的交叉点的元素,被选中,这样,该元素
ct8,4=i7=(I(7),C12(7))被读出。于是,元素ct8,4左下方对角线上的所有元素均被读出并输入给联接组g4。在这种情况下,元素i5,i3被读出,生成的联接组包括:
g4=i7;i5;i3
  =I(7),C12(7);I(5),C12(5);I(3),C12(3).    (3.1)这样,联接组g4包含输入寄存器I7,I5,I3的输出线I(7),I(5),I(3)的表示。不过,它不包含来自输出寄存器的输出线的表示,即,它只包含输出寄存器状态参数C12(7),C12(5),C12(3)(以黑体字表示)。于是,这些输出寄存器状态参数必须被用来进一步分解或替换。
与输出寄存器状态参数C12(7)相对应的元素ct7,12被用作下一个开始元素,从那里开始读出对角线上已定义的元素。然后,该输出寄存器状态参数C12(7)由该读出的对角线元素代替。重复该过程,使用元素ct5,12替换输出寄存器状态参数C12(5),使用元素ct3,12替换输出寄存器状态参数C12(3)。这样,现在联接组g4包括:
g4=I(7),C12(7)=I(7),i6;i1;i0;C5(0);
     I(5),C12(5)=I(5),i4;C7(0);
     I(3),C12(3)=I(3),i2;C9(0).    (3.2)
i’s只是用作简写,故完整的联接组的定义是:
g4=I(7);I(6),C12(6);I(1),C12(1);I(0),C12(0);
     C5(0));
     I(5);I(4),C12(4);C7(0);
     I(3);I(2),C12(2);C9(0).        (3.3)现在,联接组g4包含一些输入寄存器输出线,输出寄存器状态参数(以黑体字印刷),并第一次包含了输出寄存器输出线C5(0),C7(0),C9(0),它们是从矩阵CT的底行读出的。再次重复用第13列中的各元素(及左下方对角线上的元素)替换输出寄存器状态参数的过程,直到所有的输出寄存器状态参数都已被替换,即,直到联接组g4只包含输入寄存器输出线和输出寄存器输出线的表示,即:
g4=I(7);I(6)Ii5,i0,C6(0);I(1),i0,C11(0);I(0),
     C12(0);C5(0));
     I(5),I(4),i3,C8(0);C7(0);
     I(3),I(2),i1,C10(0);C9(0).    (3.4)
--->
g4=I(7),I(6),I(5),C12(5),I(0),C12(0),C6(0);
I(1),    I(0),C12(0),C11(0);I(0),C12(0);C5(0);
     I(5),I(4),I(3),C12(3),C8(0);C7(0);
     I(3),I(2),I(1),C12(1),C10(0);C9(0).      (3.5)进一步替换得出:
g4=I(7),I(6),I(5),I(4),I(3),I(2),I(1),I(0),
     C12(0),C11(0),C10(0),C9(0),C8(0),C7(0),I(0),
     C12(0),C6(0);I(1),I(0),C12(0),C11(0);I(0),
     C12(0); C5(0));
     I(5),I(4),I(3),I(2),I(1),I(0),C12(0),C11(0),
     C10(0),C9(0),C8(0);C7(0);
     I(3),I(2),I(1),I(0),C12(0),C11(0),C10(0);
     C9(0).                                        (3.6)到目前为止,该联接组只包含输出寄存器输出线和输入寄存器输出线,现在可以执行本发明的必要步骤,即删除同样的输入寄存器输出线和同样的输出寄存器输出线。于是,下列元素
I(5),I(4),I(3),I(2),I(1),I(0),C12(0),C11(0),
C10(0),C9(0),C8(0),C7(0),I(0),C12(0),I(1),I(0),
C12(0),C11(0);I(0),C12(0);I(5),I(4),I(3),I(2),
I(1),I(0),C12(0),C11(0),C10(0),C9(0),C8(0);C7(0);
I(1),I(0),C12(0),C11(0).                       (3.7)
被删除,留下无冗余的最终联接组g4
g4=I(7),I(6),C6(0);C5(0);I(3),I(2),
     C10(0);C9(0)                              (3.8)这样,最后得到的联接组g4没有冗余并表明了需要输入给号码为4的所选XOR门的输入寄存器输出线和输出寄存器输出线的号码。
当然,要指出的是,在执行删除操作之前,并非总是要等到组内只包含输入和输出寄存器的输出线时,才分解该组。例如,在公式(3.4)中,已经可以观察到,在联接组中,i0出现两次。于是,在此处它已经可以被删除,这是因为,即使该元素在以后再次出现,它可以被留在联接组中或被再次使用。于是,该算法也可在中间步骤扫描并执行删除。例如,替换公式(3.1)中的第一个元素i7三次会得出:
i7=I(7),C12(7)->I(7),i6,i1,i0,C5(0)->I(7),I(6),
C12(6),i1,i0,C5(0)->I(7),I(6),i5,i0,C6(0),i1,i0,
C5(0),                                           (3.9)这里,i5又一次出现,它可以与公式(3.1)中的第二个元素一起被删去。还有,公式(3.9)自身的分解中,i0出现两次,故此处i0可被删除。执行中间删除或只在最后执行删除的不同之处在于,获得最终结果的处理时间不同,这是因为,在过程中较早被删除的值当然不需再被分解。不过,以上例子显示,图4中的第S35步不是必须在所有分解的最后被执行,而是也可以在分解过程的中间阶段被执行几次。
对剩余的12个XOR门都重复同一过程,生成各个无冗余的相应的联接组gn。图2c示出了各联接组g0…g12的总图,它们用于将输出线连接到各XOR上。
图3示出了对于所选值T=8,N=13和各an值的最终电路。使用图2b中的矩阵的惊人的结果是,一些值可被认为是互相补偿的,并且XOR输出可以作为输入寄存器输出线和各输出寄存器输出线的函数计算。
只有通过按本发明方法读出各元素ct,使用元素的组,才能消除输入线和输出线反馈间的相关性(冗余)。该方法可被完全自动化并可由一个相应的处理装置输出一个相应的代码,用于装入一个FPGA或开发一个ASIC。该方法是通用的,只有T,N和an值需要选择。
要指出的是,行和列当然是可以交换的,而不会损失任何通用性。
按本发明方法的并行CRC计算电路可被用于一个传输***的任何发射机或接收机中,在该***中,需要执行CRC的计算和传输以检测用户数据上的误差。
应指出的是,本发明并不局限于上述实例,本技术专业人士可对本发明进行改动和修改。特别应指出的是,本发明可包含以下所列各权利要求所规定的特点。权利要求中的参考符号只起说明的目的,并不限定所保护的范围。

Claims (2)

1.一种用来设计一个并行CRC生成电路的方法,该电路用于为一个数据流的T个输入位并行生成一个长度为N,定义为一个CRC多项式(CRC)CRC=aNxN+aN-1xN-1+...anxn+...a1x2+a0x0(1a)的CRC代码,多项式中,aN=a0=1,并且,根据要生成的CRC代码,系数an取值为0或1,该方法包括以下步骤:
d)确定以下线路的联接:
-一个有T个输入寄存器(I0,I1,...It...,IT-1),用于同时存储所述T个输入位的输入寄存器装置(I)的输入寄存器输出线路,每个输入寄存器都有一个输出线(I(0),I(1),...I(t)...,I(T-1)),和
-一个有N个输出寄存器(C0,C1,...Cn,...,CN-1),用来同时存储所述CRC代码的输出寄存器装置(C)的输出寄存器输出线路与
-N个XOR门(XOR0,XOR1,...XORn...XORN-1)的输入线路,每个XOR门都有一个连接到所述输出寄存器的相应输入线路上的输出,和与预定数量的所述输入寄存器输出线及预定数量的所述输出寄存器输出线相连的输入线路;
上述确定联接是通过以下步骤进行的:
e1)在一个存储器中存储一个有N列T+1行的矩阵CT:
其中,0行中的行元素ct0,0,ct0,1,...ct0,n...ct0,N-1分别存储输出寄存器输出线C0(0),C1(0),...Cn(0)...CN-1(0)的索引;且
其中,an=0的列号n的列元素存储一个任意的非读出值,该值表明在生成联接组时不考虑该值,an=1的列号n的列元素存储下列值对:
ctT,n   = iT-1 =(I(T-1),CN-1(T-1))
ctT-1,n = iT-2 =(I(T-2),CN-1(T-2)}
           .
           .
           .
ctt,n   = it-1 =(I(t-1),CN-1(t-1))
           .
           .
           .
ct1,n   = i0   =(I(0),CN-1(0))         (2)这里,所述对中的第一个值标记一个输入寄存器输出线,所述值对中的第二个值标记一个输出寄存器状态参数,且值CN-1(0)标记输出寄存器输出线CN-1的输出线;
e2)为N个XOR门(XOR0,XOR1,...,XORn...XORN-1)中的每一个确定输入寄存器的输出线的索引和输出寄存器的输出线的索引,作法如下:
e21)挑选一个号码为n[0,N-1]的XOR门;
e22)从矩阵CT中读元素对ctT,n及从该元素开始对角线方向上行列号递减的所有元素对,并将它们列入一个联接组gn中;
e23)若联接组gn包含有t≠0的输出寄存器状态参数CN-1(t),则读取与该输出寄存器状态参数相对应的元素对ctt,N-1,t≠0,及从该元素对开始对角线方向上行列号递减的所有元素对,并用这些值替换联接组中的输出寄存器状态参数;
e24)重复所述读出步骤e23,直到所述联接组gn中不再存在输出寄存器状态参数,并在替换过程的中间阶段或在所有输出寄存器状态参数都已被替换之后,删除相同的输入寄存器输出线索引和相同的输出寄存器输出线索引;并
e25)对所有N个XOR门重复步骤e21-e24,以生成N个联接组;
e26)其中,每个XOR门的每个联接组gn都指明要被连接到相应的XOR门输入端上的输入寄存器输出线和输出寄存器输出线。
2.一个并行CRC生成电路,用于为一个数据流的T个输入位并行生成一个长度为N的CRC代码,该代码定义为一个CRC多项式(CRC)CRC=aNxN+aN-1xN-1+...anxn+...a1x1+a0x0(1a)其中aN=a0=1,且根据要生成的CRC代码,系数an取值为0或1,该电路包括:
a)一个有T个输入寄存器(I0,I1,...It,...,IT-1)的输入寄存器设备(I),用于同时存储所述T个输入位,每个输入寄存器都有一条输入线(I(0),I(1),...,I(t)...,I(T-1));
b)一个有N个输出寄存器(C0,C1,...Cn,...,CN-1)的输出寄存器设备(C),用于同时存储所述CRC代码,每个所述输出寄存器都有一条输入线(C0(T),C1(T),...Cn(T),...CN-1(T))和一条输出线(C0(0),C1(0),...Cn(0)...CN-1(0));其特征在于:
c)N个XOR门(XOR0,XOR1,...XORn...XORN-1)中的每一个都有一个与所述输出寄存器的相应输入线相连的一个输出,和与预定数量的所述输入寄存器输出线及预定数量的所述输出寄存器输出线相连的输入线;以及
d)按照权利要求1的设计方法中步骤d),e1),e2),e21)-e26)所确定的连接方法,输入寄存器输出线和输出寄存器输出线与所述XOR门的输入线相连。
CNB998126535A 1998-08-26 1999-08-24 用于生成循环冗余校验代码的并行循环冗余校验生成电路 Expired - Fee Related CN1171389C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE19838865A DE19838865C2 (de) 1998-08-26 1998-08-26 Parallele CRC Erzeugungsschaltung zum Erzeugen eines CRC Codes und Verfahren zum Generieren einer derartigen Schaltung
DE19838865.9 1998-08-26

Publications (2)

Publication Number Publication Date
CN1324517A CN1324517A (zh) 2001-11-28
CN1171389C true CN1171389C (zh) 2004-10-13

Family

ID=7878825

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB998126535A Expired - Fee Related CN1171389C (zh) 1998-08-26 1999-08-24 用于生成循环冗余校验代码的并行循环冗余校验生成电路

Country Status (12)

Country Link
US (1) US6560746B1 (zh)
EP (1) EP1110328B1 (zh)
JP (1) JP2002524904A (zh)
KR (1) KR20010072989A (zh)
CN (1) CN1171389C (zh)
AR (1) AR020262A1 (zh)
AT (1) ATE227057T1 (zh)
AU (1) AU5740199A (zh)
CA (1) CA2341504A1 (zh)
DE (2) DE19838865C2 (zh)
TW (1) TW448353B (zh)
WO (1) WO2000013322A1 (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6763492B1 (en) * 2000-09-26 2004-07-13 Qualcomm Incorporated Method and apparatus for encoding of linear block codes
US7216285B2 (en) * 2001-11-09 2007-05-08 Marvell International Ltd. System and method for generating cyclic redundancy check
US7174498B2 (en) * 2002-02-15 2007-02-06 Intel Corporation Obtaining cyclic redundancy code
KR100913467B1 (ko) * 2002-11-19 2009-08-25 엘지전자 주식회사 병렬 순환 중복 검사 코드 발생 시스템 및 방법
US7191383B2 (en) * 2003-03-28 2007-03-13 International Business Machines Corporation System and method for optimizing iterative circuit for cyclic redundancy check (CRC) calculation
GB2406247B (en) * 2003-09-19 2006-06-14 Matsushita Electric Ind Co Ltd Hardware accelerator for matrix calculations,especially for calculation of parity bits in cyclic redundancy check codes
US7181671B2 (en) * 2003-09-23 2007-02-20 Macronix International Co., Ltd. Parallelized CRC calculation method and system
US7219293B2 (en) * 2003-12-17 2007-05-15 Macronix International Co., Ltd. High performance CRC calculation method and system with a matrix transformation strategy
US7225387B2 (en) * 2004-02-03 2007-05-29 International Business Machines Corporation Multilevel parallel CRC generation and checking circuit
WO2007034935A1 (en) 2005-09-21 2007-03-29 Semiconductor Energy Laboratory Co., Ltd. Cyclic redundancy check circuit and semiconductor device having the cyclic redundancy check circuit
DE102006005836B4 (de) * 2006-02-08 2009-01-02 Infineon Technologies Ag Schaltungsanordnung und Verfahren zum Erzeugen von zur Fehlererkennung bei einer digitalen Schaltung auswertbaren Kontrollbits und Anordnung zum Überwachen einer digitalen Schaltung
KR101286238B1 (ko) * 2007-08-01 2013-07-15 삼성전자주식회사 데이터 병렬화 수신기
JP4814969B2 (ja) * 2009-03-23 2011-11-16 富士通株式会社 準固定回路
CN101795175B (zh) 2010-02-23 2014-03-19 中兴通讯股份有限公司 数据的校验处理方法及装置
CN101783688B (zh) * 2010-03-05 2013-08-14 苏州和迈微电子技术有限公司 一种64位并行多模式crc码生成电路的设计方法
CN102546089B (zh) * 2011-01-04 2014-07-16 中兴通讯股份有限公司 循环冗余校验crc码的实现方法及装置
CN102394720B (zh) * 2011-10-14 2014-08-06 广西师范大学 一种信息安全校验处理器
CN102891685B (zh) * 2012-09-18 2018-06-22 国核自仪***工程有限公司 基于fpga的并行循环冗余校验运算电路
CN102946297B (zh) * 2012-11-10 2015-06-17 华中科技大学 一种用于数据传输差错控制的嵌套crc码生成方法及装置
CN105653390A (zh) * 2014-11-10 2016-06-08 无锡华润矽科微电子有限公司 一种SoC***的校验方法
US11146356B2 (en) * 2017-05-12 2021-10-12 Telefonaktiebolaget Lm Ericsson (Publ) Adaptive CRC length for beam sweeping
CN108540137B (zh) * 2018-03-02 2021-09-03 江西清华泰豪三波电机有限公司 一种循环冗余校验码生成方法与装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4593393A (en) * 1984-02-06 1986-06-03 Motorola, Inc. Quasi parallel cyclic redundancy checker
JPH02101824A (ja) 1988-10-11 1990-04-13 Fujitsu Ltd 巡回冗長検査符号生成装置
EP0431416A3 (en) * 1989-12-04 1992-04-29 National Semiconductor Corporation Apparatus and method for accessing a cyclic redundancy error check code generated in parallel
US5103451A (en) * 1990-01-29 1992-04-07 Motorola, Inc. Parallel cyclic redundancy check circuit
CA2050123C (en) * 1990-10-11 1997-12-09 Subrahmanyam Dravida Apparatus and method for parallel generation of cyclic redundancy check (crc) codes
US5878057A (en) * 1995-10-06 1999-03-02 Tektronix, Inc. Highly parallel cyclic redundancy code generator

Also Published As

Publication number Publication date
EP1110328B1 (en) 2002-10-30
ATE227057T1 (de) 2002-11-15
KR20010072989A (ko) 2001-07-31
CN1324517A (zh) 2001-11-28
DE19838865A1 (de) 2000-03-09
JP2002524904A (ja) 2002-08-06
CA2341504A1 (en) 2000-03-09
DE69903743D1 (de) 2002-12-05
AR020262A1 (es) 2002-05-02
US6560746B1 (en) 2003-05-06
DE19838865C2 (de) 2001-03-01
EP1110328A1 (en) 2001-06-27
WO2000013322A1 (en) 2000-03-09
AU5740199A (en) 2000-03-21
TW448353B (en) 2001-08-01

Similar Documents

Publication Publication Date Title
CN1171389C (zh) 用于生成循环冗余校验代码的并行循环冗余校验生成电路
CN1172447C (zh) 纠错编码译码方法和利用这种方法的电路
CN1171391C (zh) 交错方法、交错装置、涡轮编码方法以及涡轮编码装置
CN1144377C (zh) 信道编码装置
CN1153354C (zh) 纠错编码器、纠错解码器和具有纠错码的数据传输***
CN1411630A (zh) 用于生成循环余数核对代码以及生成其他基于余数的编码的方法、设备和产品
CN1055586C (zh) 纠错译码器和纠错译码方法
CN1630204A (zh) 具有矩阵转换技术的循环冗余码计算方法及***
CN1516345A (zh) 错误校正编码设备
CN1158676A (zh) 通用纠错***
CN1836394A (zh) 在移动通信***中编码/解码块低密度奇偶校验码的装置和方法
CN1831900A (zh) 解密装置和解密方法
CN1324811C (zh) 通信***中的交织器和交织方法
CN1164039C (zh) 里德-所罗门编码装置
CN1282319C (zh) 帧同步电路
CN1008316B (zh) 纠错码的译码方法和***
CN1402459A (zh) 符号映射传输格式组合指示符位的设备和方法
CN1242358C (zh) 用于获取位置码和解码位置码的方法
CN1021004C (zh) 在剩余数***中用于编码和译码数据的方法和装置
CN1685621A (zh) 用于解交织通信设备中的交织数据流的方法和装置
CN1147051C (zh) 防错方法和防错装置
CN2653816Y (zh) 图像读入设备
CN1146268A (zh) 数据传输装置及其方法
CN1517852A (zh) 图像处理装置、图像处理程序、记录介质以及图像处理方法
CN1957533A (zh) 维特比译码装置以及维特比译码方法

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20041013

Termination date: 20140824

EXPY Termination of patent right or utility model