CN112214349A - 一种数据循环冗余校验装置和方法 - Google Patents
一种数据循环冗余校验装置和方法 Download PDFInfo
- Publication number
- CN112214349A CN112214349A CN202011424846.XA CN202011424846A CN112214349A CN 112214349 A CN112214349 A CN 112214349A CN 202011424846 A CN202011424846 A CN 202011424846A CN 112214349 A CN112214349 A CN 112214349A
- Authority
- CN
- China
- Prior art keywords
- data
- order
- crc
- register
- result
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
本发明提供了一种数据循环冗余校验装置和方法,其装置包括:用于储存多种CRC标准算法,并根据用户指令选定目标CRC算法的控制寄存单元;用于存储第一预设位宽的待校验数据,并根据所述待校验数据的位宽和目标CRC算法得到对应数组的输入数据的数据寄存单元;用于将所述输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果的初级校验单元;用于将所有计算结果进行逻辑运算得到校验结果的次级校验单元;用于储存校验结果的结果寄存单元。本发明可复用性高、速度快,并且大大提升差错检测能力。
Description
技术领域
本发明涉及数据处理技术领域,尤指一种数据循环冗余校验装置和方法。
背景技术
在日益增长的物联网时代,对信息存储、传输的要求越来越高,数据在传输过程中,由于通道传输特性不理想,并且受到噪声或干扰的影响,传输到接收端后可能发生错误判决,并且有时由于受到突发的脉冲干扰,错码会成串出现。
因此为了提高数据通信的可靠性,需要采用信道编码来检错和纠错,循环冗余校验CRC就是其中一种有效的编码技术,在通信和测控等领域有着广泛的应用。
循环冗余校验CRC(Cyclic Redundancy Check)以较优的误码检错能力和易于硬件实现的优点,广泛应用于各种通信协议中。
传统的CRC编解码电路基于串行数据输入方式,其实现方式简单,资源占用小,但是其只能处理串行输入的数据,难以实现当前高速并行网络的数据校验。当前,实现并行数据的校验电路多样,主要有:(1)公式法,根据串行移位电路推导得出当前CRC值与前一级CRC值和当前并行数据输入的关系。随着位宽的提高,公式法推导关系变得极为复杂,难以实现。(2)查表法,根据输入数据从CRC码表中查找出相应的值进行处理。由于查表法需要大容量的存储单元,其硬件消耗巨大,随着位宽的提高,其代价更高,不利于实现高位宽的实时校验处理。
发明内容
本发明的目的是提供一种数据循环冗余校验装置和方法,实现可复用性高、速度快,并且大大提升差错检测能力。
本发明提供的技术方案如下:
本发明提供一种数据循环冗余校验装置,包括:
用于储存多种CRC标准算法,并根据用户指令选定目标CRC算法的控制寄存单元;
与所述控制寄存单元连接,用于存储第一预设位宽的待校验数据,并根据所述待校验数据的位宽和目标CRC算法得到对应数组的输入数据的数据寄存单元;
与所述控制寄存单元连接,用于将所述输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果的初级校验单元;
与所述控制寄存单元连接,用于将所有计算结果进行逻辑运算得到校验结果的次级校验单元;
用于储存校验结果的结果寄存单元。
进一步的,所述初级校验单元包括:
用于生成数据位与所述第一预设位宽相同的多项式参数的系数生成子单元;
用于按照从低至高的位数先后顺序从所述数据寄存单元读取第二预设位宽的低位数据,并与从所述系数生成子单元所读取的相应低位多项式参数进行逻辑运算的第一运算子单元;
用于按照从高至低的位数先后顺序从所述数据寄存单元读取第二预设位宽的高位数据,并与从所述系数生成子单元所读取的相应高位多项式参数进行逻辑运算的第二运算子单元。
进一步的,所述第一运算子单元包括:
用于按照从低至高的位数先后顺序从所述数据寄存单元读取当前低位数据的第一级数据寄存器;
分别与所述第一级数据寄存器和系数生成子单元连接,用于对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果的第一级校验寄存器;
用于与所述第一级校验寄存器连接,且将所述低位与运算结果相互之间进行异或运算得到第一计算结果的第三级校验寄存器;
所述第二运算子单元包括:
用于按照从高至低的位数先后顺序从所述数据寄存单元读取当前高位数据的第二级数据寄存器;
分别与所述第二级数据寄存器和系数生成子单元连接,用于对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果的第二级校验寄存器;
用于与所述第二级校验寄存器连接,且将所述高位与运算结果相互之间进行异或运算得到第二计算结果的第四级校验寄存器。
进一步的,所述次级校验单元包括:
分别与第三级校验寄存器和第四级校验寄存器连接,用于将第三级校验寄存器和第四级校验寄存器分别输出的第一、第二计算结果进行异或运算得到校验结果的异或运算子单元。
进一步的,还包括:
用于将多项式进行反转得到新的多项式参数,以及将输入数据进行移位反转的输入反转单元;
所述次级校验单元还包括:
与所述异或运算子单元连接,用于将所述异或运算子单元输出的校验结果进行移位反转的输出反转单元。
本发明还提供一种数据循环冗余校验方法,应用于所述的数据循环冗余校验装置,包括步骤:
根据用户指令从储存的多种CRC标准算法中选定目标CRC算法;
根据将输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果;
将所有计算结果进行逻辑运算得到校验结果。
进一步的,还包括步骤:
生成数据位与所述第一预设位宽相同的多项式参数;
所述根据将输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果包括步骤:
按照从低至高的位数先后顺序读取第二预设位宽的低位数据,并与相应低位多项式参数进行逻辑运算得到计算结果;
按照从高至低的位数先后顺序读取第二预设位宽的高位数据,并与相应高位多项式参数进行逻辑运算得到计算结果。
进一步的,所述按照从低至高的位数先后顺序读取第二预设位宽的低位数据,并与相应低位多项式参数进行逻辑运算得到计算结果包括步骤:
按照从低至高的位数先后顺序读取当前低位数据;
对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果;
将所述低位与运算结果相互之间进行异或运算得到第一计算结果;
所述按照从高至低的位数先后顺序读取第二预设位宽的高位数据,并与相应高位多项式参数进行逻辑运算得到计算结果包括步骤:
按照从高至低的位数先后顺序读取当前高位数据;
对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果;
将所述高位与运算结果相互之间进行异或运算得到第二计算结果。
进一步的,所述将所有计算结果进行逻辑运算得到校验结果包括步骤:
将输出的第一计算结果和第二计算结果进行异或运算得到校验结果。
进一步的,还包括:
将多项式进行反转得到新的多项式参数,以及将输入数据进行移位反转;
所述将输出的计算结果进行异或运算得到校验结果之后包括步骤:
将输出的校验结果进行移位反转得到最终的校验结果。
通过本发明提供的一种数据循环冗余校验装置和方法,能够可复用性高、速度快,并且大大提升差错检测能力。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对一种数据循环冗余校验装置和方法的上述特性、技术特征、优点及其实现方式予以进一步说明。
图1是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图2是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图3是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图4是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图5是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图6是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图7是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图8是本发明一种数据循环冗余校验装置的一个实施例的结构示意图;
图9是本发明一种数据循环冗余校验装置的一个实施例的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定***结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本发明。在其他情况中,省略对众所周知的***、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所述描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其他特征、整体、步骤、操作、元素、组件和/或集合的存在或添加。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
具体实现中,本发明实施例中描述的移动客户端包括但不限于诸如具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的移动电话、膝上型计算机或平板计算机之类的其他便携式设备。
移动客户端支持各种应用程序,例如以下中的一个或多个:绘图应用程序、演示应用程序、网络创建应用程序、文字处理应用程序、盘刻录应用程序、电子表格应用程序、游戏应用程序、电话应用程序、视频会议应用程序、电子邮件应用程序、即时消息收发应用程序、锻炼支持应用程序、照片管理应用程序、数码相机应用程序、数字摄像机应用程序、Web浏览应用程序、数字音乐播放器应用程序和/或数字视频播放器应用程序。
另外,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本发明中,有几个关键词需要理解:多项式公式、多项式简记式、数据宽度、初始值与结果异或值、输入值反转与输出值反转。理解上述关键词,是本发明的关键之一,下面对上述关键词进行详细说明:
1、多项式公式
对于CRC标准除数,一般使用多项式公式表示,例如除数为11011,那么其相应的多项式或者二项式为G(X)=X4+X3+X+1,X的指数就代表了在该bit位上的数据为1,其中最低位的指数一定为0。还有特别需要注意的是有关位数问题,除数的位数为二项式最高次幂+1,例如上述的G(X),其最高位X4表示的是第五位。
2、多项式简记式
因为设计要求,所有多项式的最高位和最低位一定都为1,与此同时最高位的1在进行下一步计算的过程中,一定会变为0,所以一般情况下就会将最高位的1省略掉,由此才有了多项式简记式,例如第一点中提到的除数11011,它的简记式就是1011。例如在本发明中使用的多项式0X104C11DB7,一般都直接用其多项式简记式0X04C11DB7,而由于高四位均为0,由此一般简化为0X4C11DB7。
3、数据宽度
数据宽度指的是CRC校验码的长度,CRC校验码的长度始终都要比除数位数少1,与多项式简记式的长度是一致的。
4、初始值与结果异或值
在一些国际标准当中,规定了初始值以及结果异或值。
在初始值不为零的情况下,则数据在进行运算之前,需要先将要计算的数据与初始值的最低字节进行异或,然后再与多项式进行计算,由于在本发明当中增加了8-256位数据,因此如果数据非32位并且选择的是CRC-32或者CRC-32-MPEG-2算法的情况下,则还需要在与初始值的最低字节进行异或前进行其他移位等相应操作。
在结果异或值不为零的情况下,则需要将计算得到的CRC结果值再与结果异或值进行一次异或计算,得到的最终值才是需要的CRC校验码,由于在本发明当中增加了8-256位数据因此如果数据非32位,并且选择的是CRC-32或者CRC-32-MPEG-2算法的情况下,则还需要在与结果异或值进行异或前或者后还需要进行其他移位等相应操作,这样得到的最终值才是需要的CRC校验码。
5、输入值反转与输出值反转
在一些国际标准当中,规定需要输入值反转与输出值反转。
输入值反转的意思是在计算之前先将二项式反转,然后再用得到的新值和数据进行计算。例如,某二项式的正向值为1000 0000 0000 0101,反转值则为1010 0000 00000001。
输出值反转则是将最终得到的CRC结果反转。
通常,如果输入数据是反转的模式,则结果也是反转的;如果输入数据是不反转的模式,则结果也是不反转的,所以这两个选项一般是同向的。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
本发明的一个实施例,一种数据循环冗余校验装置,如图1所示,包括:
用于储存多种CRC标准算法,并根据用户指令选定目标CRC算法的控制寄存单元;
具体的,循环冗余校验(CRC)是数据通信领域中最常用的一种查错校验码,主要是用来检测或者校验在数据传输或者保存后可能会出现的错误。CRC是利用除法及余数的原理来作错误侦测的。利用循环冗余检测的方法可以提高设备的使用效率,提高通信信道的稳定性,另一方面,它还可以提高数据传输的正确性和完整性。此处的控制寄存单元可储存CRC-8、CRC-16-CCITT-FALSE、CRC-32和CRC-32-MPEG-2等多种CRC标准算法。
控制寄存单元根据不同CRC标准算法进行操作计算,如下表1和表2所示:
表1、控制寄存单元接收用户指令与多项式关系表
表2、控制寄存单元中CRC标准算法与用户指令中的Poly代码关系表
通过上表,控制寄存器储存有多种CRC标准算法,且预先设定Poly代码与选定目标CRC算法的映射关系,即假设控制寄存单元接收到用户指令的Poly代码为00,则控制寄存单元会选定CRC-32算法作为目标CRC算法控制数据寄存单元、初级校验单元和次级校验单元对待校验数据进行计算得到对应的校验结果。假设控制寄存单元接收到用户指令的Poly代码为01,则控制寄存单元会选定CRC-32-MPEG-2算法作为目标CRC算法。
与所述控制寄存单元连接,用于存储第一预设位宽的待校验数据,并根据所述待校验数据的位宽和目标CRC算法得到对应数组的输入数据的数据寄存单元;
具体的,所述第一预设位宽为8位,16位,32位,64位,128位和256位中的任意一种,第一预设位宽只要是8的倍数均在本发明的保护范围之内。不同的CRC标准算法采用对应的初始值,而初始值是已知的。
数据寄存单元在读取到控制寄存单元中选定切换的CRC标准算法后,根据算法类型将待检验数据分割成若干个等份的输入数据,且等份分割规则与CRC算法和初始校验单元的结构类型相关。
示例性的,若控制寄存单元选定切换的是CRC-32算法,待校验数据采用8,16,32,64,128,256都适用。如果待校验数据的第一预设位宽为8位(或16位,或32位)时,数据寄存单元只需要输入一次输入数据进行计算即可,此时的输入数据即为待校验数据。如果待校验数据的第一预设位宽为64位时,数据寄存单元只需要将待校验数据按照位数先后顺序分成两部分得到两组输入数据,此时的两组输入数据分别为待校验数据的前32位字符以及后32位字符,按照位数先后顺序连续两次发送两组输入数据至初级校验单元,即先将前32位字符发送给初级校验单元后,立即将后32位字符发送给初级校验单元。
同理,如果待校验数据的第一预设位宽为128位,则按照位数先后顺序分成三部分得到三组输入数据,按照位数先后顺序连续三次发送三组输入数据至初级校验单元。同理,如果待校验数据的第一预设位宽为256位,则按照位数先后顺序分成四部分得到四组输入数据,按照位数先后顺序连续四次发送输入数据至初级校验单元。
与所述控制寄存单元连接,用于将所述输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果的初级校验单元;
具体的,控制寄存单元还与初级校验单元连接,初级校验单元接收到数据寄存单元连续发送过来的多组输入数据后,读取控制寄存单元内选定切换的CRC标准算法,根据读取的CRC标准算法按照接收到输入数据的先后顺序,将输入数据的当前数据位与对应位数的多项式参数分别进行逻辑运算得到计算结果。
与所述控制寄存单元连接,用于将所有计算结果进行逻辑运算得到校验结果的次级校验单元;
用于储存校验结果的结果寄存单元。
具体的,控制寄存单元还与次级校验单元连接,次级校验单元将初级校验单元连接计算得到的所有计算结果进行逻辑运算得到校验结果。因为,结果寄存单元与次级校验单元连接,因此,次级校验单元将校验结果发送给结果寄存单元进行储存。
示例性的,假设数据寄存单元为128位寄存器,控制寄存单元选定切换的CRC-32-MPEG-2算法。那么128位寄存器储存待校验数据,并在控制寄存单元的控制下,每次发送低8位的输入数据给初级校验单元进行计算,即先将最低8位的输入数据(Bit0~Bit7)读取发送给初级校验单元,再将第二低8位的输入数据(Bit8~Bit15)读取发送给初级校验单元,直至将所有分组得到的输入数据发送给初级校验单元为止。
本实施例中,利用串行能够节约整个CRC校验的硬件布局面积,每次计算8位。即控制寄存单元储存有下列CRC标准算法,CRC-8、CRC-16-CCITT-FALSE、CRC-32和CRC-32-MPEG-2等等。如果控制寄存单元选用CRC-8算法,通过本发明可并行计算1次。如果控制寄存单元选用CRC-16-CCITT-FALSE算法,通过本发明可串行计算2次,每次计算8位。如果控制寄存单元选用CRC-32和CRC-32-MPEG-2算法,通过本发明可串行计算4次,每次计算8位。
优选的,所述初级校验单元包括:
用于生成数据位与所述第一预设位宽相同的多项式参数的系数生成子单元;
具体的,系数生成子单元会产生数据位与所述第一预设位宽相同的多项式参数。例如,如果控制寄存单元选定的是CRC-16-CCITT-FALSE算法,则待校验数据的数据位是16位,即第一预设位宽是16位,那么系数生成子单元会生成16位数据位的多项式参数,即分别为poly0,poly1,……,poly14,poly15。
如果控制寄存单元选定的是CRC-32或CRC-32-MPEG-2算法,则待校验数据的数据位是32位,即第一预设位宽是32位,那么系数生成子单元会生成16位数据位的多项式参数,即分别为poly0,poly1,……,poly31,poly32。
示例性的,针对CRC-32-MPEG-2和CRC-32算法,poly_x参数值的由来具体如下:
因为是CRC-32-MPEG-2和CRC-32算法,所以每一位都有一个相对应的poly,假设CRC-32-MPEG-2和CRC-32算法对应的Poly是多项式0x4c11db7。将多项式poly拆成32个poly_x参数,每个参数都有固定值,例如ploy_0=0x4c11db7,ploy_1=9823b6e,ploy_2=0x130476dc,……,Poly_31。
具体计算公式如下所示:
Poly_0=poly;
poly(n-1)={poly(n-2)[(n-2):0],1'b0}^({n{poly(n-2)[(n-1)]}}&poly)。
其中,poly为多项式参数的值,32>=n>=1,且n等于控制寄存单元储存选定的CRC算法的算法位数,^为异或逻辑运算符号。
示例性的,poly00~poly(n-1),假设控制寄存单元选定的是CRC-8算法,那么,n=8,因此,8个多项式参数分别如下所示:
poly00=poly;
poly01={poly00[6:0],1'b0}^({8{poly00[7]}}&poly);
poly02={poly01[6:0],1'b0}^({8{poly01[7]}}&poly);
poly03={poly02[6:0],1'b0}^({8{poly02[7]}}&poly);
poly04={poly03[6:0],1'b0}^({8{poly03[7]}}&poly);
poly05={poly04[6:0],1'b0}^({8{poly04[7]}}&poly);
poly06={poly05[6:0],1'b0}^({8{poly05[7]}}&poly);
poly07={poly06[6:0],1'b0}^({8{poly06[7]}}&poly)。
至于其他类型的CRC算法对应的多项式参数生成方式,可参照上述计算原理进行计算获取。
用于按照从低至高的位数先后顺序从所述数据寄存单元读取第二预设位宽的低位数据,并与从所述系数生成子单元所读取的相应低位多项式参数进行逻辑运算的第一运算子单元;
其中,所述第一预设位宽是所述第二预设位宽的两倍。
用于按照从高至低的位数先后顺序从所述数据寄存单元读取第二预设位宽的高位数据,并与从所述系数生成子单元所读取的相应高位多项式参数进行逻辑运算的第二运算子单元。
具体的,系数生成子单元生成与所述第一预设位宽相同的多项式参数后,将这些多项式参数按照从低至高的位数先后顺序传递第二预设位宽的低位多项式参数至第一运算子单元,并按照从高至低的位数先后顺序传递第二预设位宽的高位多项式参数至第一运算子单元。第一运算子单元读取待校验数据的最高位数据后,将到将第二预设位宽的最高位数据与最高位多项式参数进行逻辑运算,
由于所述第一预设位宽是所述第二预设位宽的两倍,因此,延续上述示例,在控制寄存单元选定的是CRC-16-CCITT-FALSE算法时,系数生成子单元按照从低至高的位数先后顺序将第二预设位宽的低位多项式参数依次传递至第一运算子单元,也就是说系数生成子单元会将第二预设位宽的低位多项式参数poly0→poly1→poly2→poly3→poly4→poly5→poly6→poly7依次传递至第一运算子单元。此外,系数生成子单元按照从高至低的位数先后顺序将第二预设位宽的高位多项式参数依次传递至第二运算子单元,也就是说系数生成子单元会将poly15→poly14→poly13→poly12→poly11→poly10→poly9→poly8依次传递至第二运算子单元。
在控制寄存单元选定的是CRC-32或CRC-32-MPEG-2算法时,数据传递过程可参照上述内容,在此不再一一赘述。
优选的,所述第一运算子单元包括:
用于按照从低至高的位数先后顺序从所述数据寄存单元读取当前低位数据的第一级数据寄存器;
分别与所述第一级数据寄存器和系数生成子单元连接,用于对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果的第一级校验寄存器;
用于与所述第一级校验寄存器连接,且将所述低位与运算结果相互之间进行异或运算得到第一计算结果的第三级校验寄存器;
所述第二运算子单元包括:
用于按照从高至低的位数先后顺序从所述数据寄存单元读取当前高位数据的第二级数据寄存器;
分别与所述第二级数据寄存器和系数生成子单元连接,用于对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果的第二级校验寄存器;
用于与所述第二级校验寄存器连接,且将所述高位与运算结果相互之间进行异或运算得到第二计算结果的第四级校验寄存器。
具体的,如果第一级数据寄存器的最大读取数据位为8位,那么初级校验单元内部具有8个第一数据寄存器和第一级校验寄存器,此外,初级校验单元内部具有7个第三级校验寄存器。同理,如果第二级数据寄存器的最大读取数据位为8位,那么初级校验单元内部具有8个第二数据寄存器和第二级校验寄存器,此外,初级校验单元内部具有7个第四级校验寄存器。
示例性的,在控制寄存单元选定的是CRC-16-CCITT-FALSE算法时,第一数据寄存器、第二数据寄存器、第一级校验寄存器和第二级校验寄存器的数量均是8个,第三级校验寄存器和第四级校验寄存器的数量7个。同理,在控制寄存单元选定的是CRC-32或CRC-32-MPEG-2算法时,第一数据寄存器、第二数据寄存器、第一级校验寄存器和第二级校验寄存器的数量均是8个,第三级校验寄存器和第四级校验寄存器的数量就是7个。
以CRC-32-MPEG-2为例,第一数据寄存器、第二数据寄存器均会在控制寄存单元的控制下分两次分别读取低位数据和高位数据,第一级校验寄存器和第二级校验寄存器均会在控制寄存单元的控制下分两次分别将读取的读取数据与对应多项式参数进行与运算,第三级校验寄存器和第四级校验寄存器会在控制寄存单元的控制下分两次进行异或运算。即第一数据寄存器会先读取第一组低位数据Bit0~Bit7,然后,第一级校验寄存器将第一组低位数据Bit0~Bit7分别与对应的低位多项式参数poly00~poly07进行与逻辑计算,参见下列计算公式所示:
d0=({8{CRC_tmp0[0]}}&poly00);
d1=({8{CRC_tmp0[1]}}&poly01);
d2=({8{CRC_tmp0[2]}}&poly02);
d3=({8{CRC_tmp0[3]}}&poly03);
d4=({8{CRC_tmp0[4]}}&poly04);
d5=({8{CRC_tmp0[5]}}&poly05);
d6=({8{CRC_tmp0[6]}}&poly06);
d7=({8{CRC_tmp0[7]}}&poly07)。
其中,&为与逻辑运算符号。
第一数据寄存器再读取第二组低位数据Bit8~Bit15,然后,第一级校验寄存器将第二组低位数据Bit8~Bit15分别与对应的低位多项式参数poly08~poly15进行与逻辑计算,参见下列计算公式所示:
d8=({8{CRC_tmp0[8]}}&poly08);
d9=({8{CRC_tmp0[9]}}&poly09);
d10=({8{CRC_tmp0[10]}}&poly10);
d11=({8{CRC_tmp0[11]}}&poly11);
d12=({8{CRC_tmp0[12]}}&poly12);
d13=({8{CRC_tmp0[13]}}&poly13);
d14=({8{CRC_tmp0[14]}}&poly14);
d15=({8{CRC_tmp0[15]}}&poly15)。
同理,即第二数据寄存器会先读取第一组高位数据Bit31~Bit24,然后,第一级校验寄存器将第一组高位数据Bit31~Bit24分别与对应的高位多项式参数poly31~poly24进行与逻辑计算,参见下列计算公式所示:
d31=({8{CRC_tmp0[31]}}&poly31);
d30=({8{CRC_tmp0[30]}}&poly30);
d29=({8{CRC_tmp0[29]}}&poly29);
d28=({8{CRC_tmp0[28]}}&poly28);
d27=({8{CRC_tmp0[27]}}&poly27);
d26=({8{CRC_tmp0[26]}}&poly26);
d25=({8{CRC_tmp0[25]}}&poly25);
d24=({8{CRC_tmp0[24]}}&poly24)。
第二数据寄存器再读取第二组高位数据Bit23~Bit16,然后,第一级校验寄存器将第二组高位数据Bit23~Bit16分别与对应的高位多项式参数poly23~poly16进行与逻辑计算,参见下列计算公式所示:
d23=({8{CRC_tmp0[23]}}&poly23);
D22=({8{CRC_tmp0[22]}}&poly22);
d21=({8{CRC_tmp0[21]}}&poly21);
d20=({8{CRC_tmp0[20]}}&poly20);
d19=({8{CRC_tmp0[19]}}&poly19);
d18=({8{CRC_tmp0[18]}}&poly18);
d17=({8{CRC_tmp0[17]}}&poly17);
d16=({8{CRC_tmp0[16]}}&poly16)。
此外,如果第一级数据寄存器的最大读取数据位为第二预设位宽,那么初级校验单元内部具有与第二预设位宽的数值相同的第一数据寄存器和第一级校验寄存器,此外,初级校验单元内部具有第一预设位宽的数值减去一个数量的第三级校验寄存器。同理,如果第二级数据寄存器的最大读取数据位为第二预设位宽,那么初级校验单元内部具有与第二预设位宽的数值相同的第二数据寄存器和第二级校验寄存器,此外,初级校验单元内部具有第一预设位宽的数值减去一个数量的第四级校验寄存器。
例如,在控制寄存单元选定的是CRC-16-CCITT-FALSE算法时,第一数据寄存器、第二数据寄存器、第一级校验寄存器和第二级校验寄存器的数量均是8个,第三级校验寄存器和第四级校验寄存器的数量就是(16-1)=15个。同理,在控制寄存单元选定的是CRC-32或CRC-32-MPEG-2算法时,第一数据寄存器、第二数据寄存器、第一级校验寄存器和第二级校验寄存器的数量均是16个,第三级校验寄存器和第四级校验寄存器的数量就是(32-1)=31个。其中,输入数据与对应的多项式参数进行与逻辑计算参见上述示例,在此不再一一赘述。
第一级数据寄存器、第一级校验寄存器通过上述方式计算完成低位多项式参数和低位数据的与运算后,第三级校验寄存器会将第一级校验寄存器的低位与运算结果相互进行异或运算。同理,第二级数据寄存器、第二级校验寄存器通过上述方式计算完成高位多项式参数和高位数据的与运算后,第四级校验寄存器会将第二级校验寄存器的高位与运算结果相互进行异或运算。
示例性的,由系数生成子单元根据控制寄存单元中储存的CRC-16-CCITT-FALSE算法产生16个多项式参数,分别为poly0,poly1,……,poly14,poly15,具体产生过程参见上述实施例。然后,第一级数据寄存器从数据寄存单元读取传递过来的输入数据的低8位,第一级数据寄存器将输入数据的低8位传递给第一级数据寄存器,第一级数据寄存器将输入数据的低8位分别和poly0,poly1,……,poly06,poly07进行与运算,第三级数据寄存器再将此低8位的低位与运算结果相互异或得到tmp1。此外,第二级数据寄存器从数据寄存单元读取传递过来的输入数据的高8位,第二级数据寄存器将输入数据的高8位传递给第二级数据寄存器,第二级数据寄存器将输入数据的高8位分别和poly08,poly09,……,poly14,poly15进行与运算,第四级数据寄存器再将此高8位的高位与运算结果相互异或得到tmp2。延续上述实施例,初级运算单元中的数据读取和计算流程如图2所示,其中,输出的计算结果tmpi中的i待校验数据划分为输入数据进行计算的输入次数,i在数据输入时就确定了,例如待校验数据的位数为16位则i为2,每运算完成8位则i减1直至i=0为止中断计算。待校验数据的位数为64位则i为8,每运算完成8位则i减1直至i=0为止中断计算。
其中,多个第三级校验寄存器的连接关系为并列设置,且与对应的第一级校验寄存器连接,以将输入的低位与运算结果进行相互之间异或运算。示例性的,多个第三级校验寄存器的连接结构如图3所示。
优选的,所述次级校验单元包括:
分别与第三级校验寄存器和第四级校验寄存器连接,用于将第三级校验寄存器和第四级校验寄存器分别输出的计算结果进行异或运算得到校验结果的异或运算子单元。
具体的,延续上述实施例,异或运算子单元将第三级数据寄存器输出的计算结果tmp1以及第四级数据寄存器输出的计算结果tmp2进行异或运算得到校验结果。
示例性的,控制寄存单元选定的是CRC-32-MPEG-2算法时整体的计算框图如图4所示,即参照上述实施例,初级校验单元将多项式参数、输入数据进行与逻辑运算,将各与逻辑运算结果相互之间进行异或运算得到计算结果后,由异或运算子单元将第三级数据寄存器输出的计算结果以及第四级数据寄存器输出的计算结果进行异或运算得到校验结果,将异或运算子单元输出的校验结果作为待校验数据的校验结果。
优选的,还包括:
用于将多项式进行反转得到新的多项式参数,以及将输入数据进行移位反转的输入反转单元;
所述次级校验单元还包括:
与所述异或运算子单元连接,用于将所述异或运算子单元输出的校验结果进行移位反转的输出反转单元。
具体的,延续上述实施例,输入反转单元将多项式进行反转,并且将数据寄存单元传递的输入数据进行移位反转。此外,异或运算子单元将第三级数据寄存器输出的计算结果tmp1以及第四级数据寄存器输出的计算结果tmp2进行异或运算得到校验结果,另外输出反转单元将异或运算子单元的校验结果进行移位反转操作得到反转后的校验结果。
示例性的,控制寄存单元选定的是CRC-32算法时,整体的计算框图如图5所示,即参照上述实施例,输入反转单元首先将多项式、输入数据进行取反,以便得到取反后的多项式参数和取反后的输入数据,然后初级校验单元将取反后的多项式参数和取反后的输入数据进行与逻辑运算,再将各与逻辑运算结果相互之间进行异或运算得到计算结果后,由异或运算子单元将第三级数据寄存器输出的计算结果以及第四级数据寄存器输出的计算结果进行异或运算得到校验结果,然后通过输出反转单元将异或运算子单元输出的校验结果进行移位反转操作得到反转后的校验结果,将输出反转单元输出的反转后的校验结果作为待校验数据的校验结果。
例如,具体实现方式---多位传输(>32),假如输入64位数据,且控制寄存单元选定的是CRC-32位算法,那么输入反转单元首先需要进行前32位与后32位进行互换-----0x1234 5678→0x5678 1234,然后初级校验单元首先计算0x1234的校验码,再计算0x5678,最后有次级校验单元将输出结果反转得到的32位校验值即0x12345678的校验值。
其中,图4和图5中的Tmp0[n]=当前新输入的数值和前一个数据的计算结果的异或值,Tmp0[0]相当于tmp0的最低位(第0位),Tmp0[1]相当于tmp0的最低位(第1位),以此类推Fi={32{tmp0[i]}} & poly_i) (31>=i>=0),因此,图4和图5中的Tmp1=F0^F1^……^F31。
综上所述,次级校验单元的计算流程根据控制寄存单元内选定切换的CRC标准算法的类型进行直接计算输出或者计算移位反转输出最终的校验结果。示例性的,若控制寄存单元选定切换的是CRC-32-MPEG-2算法,多项式、输入数据和输出数据不需要任何操作,多项式和输入数据直接参与计算,并且异或运算子单元直接将第三级数据寄存器输出的计算结果以及第四级数据寄存器输出的计算结果进行异或计算后输出就是最终的校验结果。当然,若控制寄存单元选定切换的是CRC-32算法则需要将多项式和输入数据按位反转参与计算,并且需将第三级数据寄存器输出的计算结果以及第四级数据寄存器输出的计算结果进行异或计算得到输出的校验结果,并将输出的校验结果每一位全部取反(1->0,0->1)再输出得到最终的校验结果。
本发明相比于一般的串行32位数据需要计算32次,现在只需要4次,节约了时间;相比于一般的并行32位数据需要使用32对异或门,现只要4对异或门,节约了硬件需求数量,节省了硬件布局面积。而且对于待校验数据的输入数据长度可任意选定为8的整数倍皆可(8,16,24,……,128,256等等)。最后,本发明的数据循环冗余校验装置复用性强,算法选择性强,当需要调整算法时,修改简单,只需要根据算法选择,是否输入输出反转以及输入输出初始值即可完成CRC算法的切换。
一般硬件CRC的算法是CRC-32/MPEG-2,但是软件常用的是CRC-32算法,为了做得更加通用,本设计将同时包含CRC-32/MPEG-2和CRC-32算法,并且增加的面积较小,并不是普通的将两种算法堆积在硬件中,两种算法的计算框图是完全一致的。仅仅在数据存储单元输入时进行每个字节是否按位反转,在次级运算时所有数据是否按位反转以及输出数据是否需要与0xffffffff异或有所区别。
本发明可以实现在计算一组数据过程中***另一组或其他多组数据的功能,具体操作步骤描述:
1.存储数据:将计算到当前数据的CRC结果存储。
2.将CRC寄存器复位,回到最初的全1状态。
3.计算***的数据。
4.读出***的数据结果。
5.将CRC寄存器复位。
6.将第一步中存储的结果当成新的数据写入,并继续计算第一组未计算完成的数据。
实现方式:增加一个中间数据寄存器,可以实时存放当前的计算结果。当客户想***一组完全无关的数据时,可以将当前计算结果取出存储,按照上述操作步骤进行操作。可以更加方便灵活的进行计算。
本发明能够节约硬件占用面积,由于串行是一位一位进行计算,所以32位数据需要计算32次,32个clk计算完成;并行是一次计算32位,一个clk计算完成。在实际运用中,CRC的运算结果可以等待多个clk后再进行调用,因此考虑到时间的利用以及节约面积的共同考虑,此设计采用一次计算8位,分四次计算的方式来完成。本发明的复用性强,因为本发明只需在输入数据前,根据CRC标准算法,选择是否需要输入输出反转以及修改输入输出初始值即可切换目标CRC算法。本发明输入数据的长度,可选择性强,例如想要验证连续的3个8位数据是否传输正确,只需要选择CRC-32或者CRC-32/MPEG-2验证一次即可,节约时间。本发明的时效性大大提升,例如本发明输入1个128位数据,仅需要16(4*4)个时钟周期,而一般的硬件CRC-32不可以检验大于32位的数据。本发明的计算占用资源少,在计算过程中只需要8个异或门进行计算即可,而传统的硬件CRC需要用到32个异或门。最重要的是,本发明多种CRC标准算法兼容,用户可以根据需求选择最合适的算法,并且多种CRC标准算法是基于CRC-32/MPEG-2实现,在此基础上仅增加了3个选择器分别用来判断是否需要输入输出反转、输入输出初始值等等。本发明由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用***资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段。
循环冗余校验(CRC)是数据通信领域中最常用的一种查错校验码,主要是用来检测或者校验在数据传输或者保存后可能会出现的错误。CRC是利用除法及余数的原理来作错误侦测的。利用循环冗余检测的方法可以提高设备的使用效率,提高通信信道的稳定性,另一方面,它还可以提高数据传输的正确性和完整性。本控制寄存单元可储存发明兼容CRC-8、CRC-16-CCITT-FALSE、CRC-32和CRC-32-MPEG-2四种标准算法、大小端模式任意选择存放、以及支持8-256位数据的检测或校验的功能。本模块具有仅使用一个CRC模块即可满足任意8-256位数的检验、灵活性高、可复用性高、检错能力强、开销低、速度快的特点。
本发明涉及集成电路设计技术领域、数据存储和数据通讯领域,具体涉及一种支持8-256位数据及多种模式的高集成复杂CRC模块,尤其能够提高传输的正确性以及完整性。
本发明设计的目的在于提供一种支持8-256位数据及多种模式的高集成复杂CRC模块。本发明具有灵活性高、可复用性高、检错能力强、开销低的特点。
主要利用CRC校验来处理各种数据流的数据正确性校验。一般一个CRC模块只能对应一种标准算法,并且只适用于相应算法数据的长度,例如:CRC-32模块只能判断输入的32位数据是否正确,无法判断其他长度的数据。而在本发明中,为了解决这一问题,在CRC-32-MPEG-2算法基础上增加了CRC-32算法的选择,并且增加了CRC-8、CRC-16-CCITT-FALSE两种标准算法,以及大小端模式还有8-256位数据输入的选择,来满足不同的需求,提高复用性,可选择性、准确性。
需要注意两个关键点:一是要预先确定一个发送端和接收端都用来作为除数的二进制多项式;二是把原始帧与上面选定的除数进行二进制除法运算,计算出帧校验序列(FCS)。前者可以随机选择,也可按国际上通行的标准选择,但最高位和最低位必须均为“1”。在本发明中,例如选用的国际标准多项式0X104C11DB7,其最高位和最低位均为1,符合要求。
综上所述,本发明具有灵活性高、可复用性高、检错能力强、速度快的特点。研究了一种并行CRC标准算法并采用硬件描述语言来设计实现CRC发生器和校验器可以准确地进行数据传输。
本发明的一个实施例,一种数据循环冗余校验方法,包括步骤:
S100根据用户指令从储存的多种CRC标准算法中选定目标CRC算法;
S200根据将输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果;
S300将所有计算结果进行逻辑运算得到校验结果。
本发明的一个实施例,一种数据循环冗余校验方法,包括步骤:
S100根据用户指令从储存的多种CRC标准算法中选定目标CRC算法;
S150生成数据位与所述第一预设位宽相同的多项式参数;
S210按照从低至高的位数先后顺序读取第二预设位宽的低位数据,并与相应低位多项式参数进行逻辑运算得到计算结果;
S220按照从高至低的位数先后顺序读取第二预设位宽的高位数据,并与相应高位多项式参数进行逻辑运算得到计算结果;
S300将所有计算结果进行逻辑运算得到校验结果。
本发明的一个实施例,一种数据循环冗余校验方法,包括步骤:
S100根据用户指令从储存的多种CRC标准算法中选定目标CRC算法;
S150生成数据位与所述第一预设位宽相同的多项式参数;
S211按照从低至高的位数先后顺序读取当前低位数据;
S212对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果;
S213将所述低位与运算结果相互之间进行异或运算得到第一计算结果;
S221按照从高至低的位数先后顺序读取当前高位数据;
S222对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果;
S223将所述高位与运算结果相互之间进行异或运算得到第二计算结果;
S310将输出的第一计算结果和第二计算结果进行异或运算得到校验结果。
本发明的一个实施例,一种数据循环冗余校验方法,包括步骤:
S100根据用户指令从储存的多种CRC标准算法中选定目标CRC算法;
S150生成数据位与所述第一预设位宽相同的多项式参数;
S160将多项式进行反转得到新的多项式参数,以及将输入数据进行移位反转;
S211按照从低至高的位数先后顺序读取当前低位数据;
S212对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果;
S213将所述低位与运算结果相互之间进行异或运算得到第一计算结果;
S221按照从高至低的位数先后顺序读取当前高位数据;
S222对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果;
S223将所述高位与运算结果相互之间进行异或运算得到第二计算结果;
S310将输出的第一计算结果和第二计算结果进行异或运算得到校验结果;
S320将输出的校验结果进行移位反转得到最终的校验结果。
在本发明中,提出了一种支持8-256位数据及多种模式的高集成复杂CRC模块的设计。
如图4所示是CRC的算法结构图,下面以CRC-32-MPEG-2为例:Poly_0是CRC-32-MPEG-2设定的poly值即0x4C11DB7;IN即写入图6中CRC_DR寄存器的值,OUT即从图6中CRC_DR寄存器读出的值;OUT初始值为0xFFFFFFFF,因此当CRC_CR寄存器中的RESET位复位发生后,OUT值立即被初始化为0xFFFFFFFF。
在本发明中,CRC计算单元含有1个32位数据寄存器。对该寄存器进行写操作时,作为输入寄存器,可以输入要进行CRC计算的新数据;对该寄存器进行读操作时,返回上一次CRC计算的结果;每次写入数据寄存器,其计算结果是前一次CRC计算结果和新计算结果的组合(例如以CRC-32为例,是对整个32位字进行CRC计算,而不是逐字节地计算);可以通过设置寄存器CRC_CTRL的RESET位来重置寄存器CRC_DR为0xFFFFFFFF。此操作不影响寄存器CRC_IDR内的数据。
在本发明中,如图7-图9,对于AHB总线上的写操作而言:当写操作的数值大于寄存器的宽度或分配的寄存器宽度时,超出的部分会被忽略;一个AHB写入操作花费2个HCLK周期。这两个周期一个是控制周期,一个是数据周期;AHB总线操作是流水线实现的,所以当第一次传输的总线主机采样完成时,第二次传输的控制也会被从机采样。
在本发明中,对AHB总线上的读操作而言:当读取数据宽度小于可读取的最大宽度时,未读取的高比特位返回值为0;一个AHB读取操作花费2个HCLK周期。这两个周期一个是控制周期,一个是数据周期;AHB总线操作是流水线实现的,所以当第一次传输的总线主机采样完成时,第二次传输的控制也会被从机采样。
在本发明中,CRC_OUT初始值为0xFFFFFFFF。每当完成一次运算时,CRC_OUT的值都将改变一次,并且在完成下一次运算之前,CRC_OUT的值都将保持不变。
在本发明中,CRC_IN初始值为0x00000000。因为本发明支持8-256位数据及多种模式,因此在正式进入计算之前,根据不同的数据长度及模式,改变输入数据字节及比特位间的关系,例如:
1.在CRC-32-MPEG-2算法、16位数据长度、大端存放模式下,输入的16位数据首先需要进行移位操作及第0位与第15位互换、第1位与第14位互换……第7位与第8位互换,以此类推,移位操作完成后再与CRC_OUT(前一次的计算结果)的高16位进行异或运算。在完成上述操作后,将新得到的CRC_IN的值赋给tmp0,然后再进行图1所示的运算操作得到tmp1。在tmp1传输给CRC_OUT之前再根据不同的数据长度及模式,改变tmp1数据字节及比特位间的关系。在现有模式下,tmp1需要与CRC_OUT(前一次的计算结果)进行移位操作16位后的数据进行异或操作后再传输给CRC_OUT,此时得到的CRC_OUT及本次输入的CRC_IN的校验码。
2.在CRC-32算法、32位数据长度、小端存放模式下,输入的32位数据首先与CRC_OUT(前一次的计算结果)进行异或运算。在完成上述操作后,将新得到的CRC_IN的值赋给tmp0,然后再进行图1所示的运算操作得到tmp1。在tmp1传输给CRC_OUT之前再根据不同的数据长度及模式,改变tmp1数据字节及比特位间的关系。在现有模式下,tmp1可以直接传输给CRC_OUT,此时得到的CRC_OUT及本次输入的CRC_IN的校验码。
3.在CRC-32算法、32位数据长度、大端存放模式下,输入的32位数据首先需要进行移位操作及第0位与第31位互换、第1位与第30位互换……第15位与第16位互换,以此类推,移位操作完成后再与CRC_OUT(前一次的计算结果)进行异或运算。在完成上述操作后,将新得到的CRC_IN的值赋给tmp0,然后再进行图1所示的运算操作得到tmp1。在tmp1传输给CRC_OUT之前再根据不同的数据长度及模式,改变tmp1数据字节及比特位间的关系。在现有模式下,tmp1需要首先需要进行移位操作及第0位与第31位互换、第1位与第30位互换……第15位与第16位互换,以此类推,然后与0xFFFFFFFF进行异或操作后再传输给CRC_OUT,此时得到的CRC_OUT及本次输入的CRC_IN的校验码。
本发明中提供CRC-8、CRC-16-CCITT-FALSE、CRC-32和CRC-32-MPEG-2多种CRC标准算法以供用户选择切换需要的目标CRC算法。
常用的生成多项式的校验检错能力并不是完全100%成功的,通过仿真实验研究,目前常用的生成多项式的综合检错能力有一定的局限性,如果生成多项式的比特数越大,其差错检测能力越强,漏检错误率越低;生成多项式在比特数相同的情况下,差错检测能力相同;漏检错误概率范围大致相同,但是对于不同的信道误码率,又有不同的漏检错误概率。例如用CRC-32来检测8位数据,其检错能力相较CRC-8而言较弱,因此在本发明中,提供多种模式的选择,希望能够提高准确率。
在本发明中,得到CRC数据的校验码以及证明CRC校验码正确性的方法如下所示:
1.当数据小于等于32bit时,使能CRC_CR寄存器中的置位信号,将数据写入CRC_DR寄存器,经过4个hclk后读出该寄存器,得到的即为写入数据的32bitCRC校验码;
2.当数据大于32bit时,数据从高位到低位发送到CRC_DR寄存器中,且数据发送中途不要使能CRC_CR寄存器中的置位信号,数据发送完毕得到的即是该组数据的校验码;
3.当接收到的数据需要校验时,将该数据送入CRC_DR寄存器中进行运算,如果得到的值是0,那么证明数据没有发生丢失。
综上所述,在掌握上述规律后,可以高效并且高精度的完成兼容CRC-8、CRC-16-CCITT-FALSE、CRC-32和CRC-32-MPEG-2四种标准算法、大小端模式任意选择存放、以及支持8-256位数据的检测或校验的功能模块,对比一般的CRC校验模块,本发明的覆盖面更广、可选择性更多、准确性更高。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其他的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性、机械或其他的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可能集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种数据循环冗余校验装置,其特征在于,包括:
用于储存多种CRC标准算法,并根据用户指令选定目标CRC算法的控制寄存单元;
与所述控制寄存单元连接,用于存储第一预设位宽的待校验数据,并根据所述待校验数据的位宽和目标CRC算法得到对应数组的输入数据的数据寄存单元;
与所述控制寄存单元连接,用于将所述输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果的初级校验单元;
与所述控制寄存单元连接,用于将所有计算结果进行逻辑运算得到校验结果的次级校验单元;
用于储存校验结果的结果寄存单元;
所述初级校验单元包括:
用于生成数据位与所述第一预设位宽相同的多项式参数的系数生成子单元;
用于按照从低至高的位数先后顺序从所述数据寄存单元读取第二预设位宽的低位数据,并与从所述系数生成子单元所读取的相应低位多项式参数进行逻辑运算的第一运算子单元;
用于按照从高至低的位数先后顺序从所述数据寄存单元读取第二预设位宽的高位数据,并与从所述系数生成子单元所读取的相应高位多项式参数进行逻辑运算的第二运算子单元。
2.根据权利要求1所述的数据循环冗余校验装置,其特征在于,所述第一运算子单元包括:
用于按照从低至高的位数先后顺序从所述数据寄存单元读取当前低位数据的第一级数据寄存器;
分别与所述第一级数据寄存器和系数生成子单元连接,用于对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果的第一级校验寄存器;
用于与所述第一级校验寄存器连接,且将所述低位与运算结果相互之间进行异或运算得到第一计算结果的第三级校验寄存器;
所述第二运算子单元包括:
用于按照从高至低的位数先后顺序从所述数据寄存单元读取当前高位数据的第二级数据寄存器;
分别与所述第二级数据寄存器和系数生成子单元连接,用于对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果的第二级校验寄存器;
用于与所述第二级校验寄存器连接,且将所述高位与运算结果相互之间进行异或运算得到第二计算结果的第四级校验寄存器。
3.根据权利要求2所述的数据循环冗余校验装置,其特征在于,所述次级校验单元包括:
分别与第三级校验寄存器和第四级校验寄存器连接,用于将第三级校验寄存器和第四级校验寄存器分别输出的第一、第二计算结果进行异或运算得到校验结果的异或运算子单元。
4.根据权利要求3所述的数据循环冗余校验装置,其特征在于,还包括:
用于将多项式进行反转得到新的多项式参数,以及将输入数据进行移位反转的输入反转单元;
所述次级校验单元还包括:
与所述异或运算子单元连接,用于将所述异或运算子单元输出的校验结果进行移位反转的输出反转单元。
5.一种数据循环冗余校验方法,其特征在于,应用于权利要求1-4任一项所述的数据循环冗余校验装置,包括步骤:
生成数据位与所述第一预设位宽相同的多项式参数;
根据用户指令从储存的多种CRC标准算法中选定目标CRC算法;
根据将输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果;
将所有计算结果进行逻辑运算得到校验结果;
所述根据将输入数据的当前数据位与其对应的多项式参数进行逻辑运算得到对应计算结果包括步骤:
按照从低至高的位数先后顺序读取第二预设位宽的低位数据,并与相应低位多项式参数进行逻辑运算得到计算结果;
按照从高至低的位数先后顺序读取第二预设位宽的高位数据,并与相应高位多项式参数进行逻辑运算得到计算结果。
6.根据权利要求5所述的数据循环冗余校验方法,其特征在于,所述按照从低至高的位数先后顺序读取第二预设位宽的低位数据,并与相应低位多项式参数进行逻辑运算得到计算结果包括步骤:
按照从低至高的位数先后顺序读取当前低位数据;
对当前低位数据和对应低位多项式参数进行与运算得到低位与运算结果;
将所述低位与运算结果相互之间进行异或运算得到第一计算结果;
所述按照从高至低的位数先后顺序读取第二预设位宽的高位数据,并与相应高位多项式参数进行逻辑运算得到计算结果包括步骤:
按照从高至低的位数先后顺序读取当前高位数据;
对输入的当前高位数据和对应高位多项式参数进行与运算得到高位与运算结果;
将所述高位与运算结果相互之间进行异或运算得到第二计算结果。
7.根据权利要求6所述的数据循环冗余校验方法,其特征在于,所述将所有计算结果进行逻辑运算得到校验结果包括步骤:
将输出的第一计算结果和第二计算结果进行异或运算得到校验结果。
8.根据权利要求7所述的数据循环冗余校验方法,其特征在于,还包括:
将多项式进行反转得到新的多项式参数,以及将输入数据进行移位反转;
所述将输出的计算结果进行异或运算得到校验结果之后包括步骤:
将输出的校验结果进行移位反转得到最终的校验结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011424846.XA CN112214349B (zh) | 2020-12-09 | 2020-12-09 | 一种数据循环冗余校验装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011424846.XA CN112214349B (zh) | 2020-12-09 | 2020-12-09 | 一种数据循环冗余校验装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112214349A true CN112214349A (zh) | 2021-01-12 |
CN112214349B CN112214349B (zh) | 2021-03-05 |
Family
ID=74067990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011424846.XA Active CN112214349B (zh) | 2020-12-09 | 2020-12-09 | 一种数据循环冗余校验装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112214349B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114389752A (zh) * | 2021-12-15 | 2022-04-22 | 上海金仕达软件科技有限公司 | 循环冗余校验码生成方法、装置、设备、介质和程序产品 |
CN114944889A (zh) * | 2022-05-19 | 2022-08-26 | 成都汇蓉国科微***技术有限公司 | 一种基于可参数化配置的多功能通信数据校验***和方法 |
CN115549854A (zh) * | 2021-06-30 | 2022-12-30 | 上海寒武纪信息科技有限公司 | 循环冗余校验方法、装置、存储介质以及电子设备 |
CN116861493A (zh) * | 2023-08-31 | 2023-10-10 | 上海芯联芯智能科技有限公司 | 一种校验码生成方法、处理器及电子设备 |
CN117271201A (zh) * | 2023-11-22 | 2023-12-22 | 北京紫光芯能科技有限公司 | 循环冗余校验装置及循环冗余校验方法 |
CN117453261A (zh) * | 2023-11-10 | 2024-01-26 | 珠海科创储能科技有限公司 | 设备的升级数据校验方法、存储介质及电子设备 |
CN117632273A (zh) * | 2024-01-26 | 2024-03-01 | 杭州瑞盟科技股份有限公司 | 集成电路的配置方法、***、集成电路的存储模块及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7206945B2 (en) * | 2001-12-13 | 2007-04-17 | Lg Electronics Inc. | Parallel distributed sample descrambling apparatus of passive optical network and method thereof |
CN102761394A (zh) * | 2012-07-05 | 2012-10-31 | 中兴通讯股份有限公司 | 数据的处理方法及装置 |
CN105356966A (zh) * | 2014-08-22 | 2016-02-24 | 华为技术有限公司 | 循环冗余校验实现方法、装置和网络设备 |
CN108270508A (zh) * | 2016-12-30 | 2018-07-10 | 华为技术有限公司 | 一种循环冗余校验crc实现方法、装置及网络设备 |
-
2020
- 2020-12-09 CN CN202011424846.XA patent/CN112214349B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7206945B2 (en) * | 2001-12-13 | 2007-04-17 | Lg Electronics Inc. | Parallel distributed sample descrambling apparatus of passive optical network and method thereof |
CN102761394A (zh) * | 2012-07-05 | 2012-10-31 | 中兴通讯股份有限公司 | 数据的处理方法及装置 |
CN105356966A (zh) * | 2014-08-22 | 2016-02-24 | 华为技术有限公司 | 循环冗余校验实现方法、装置和网络设备 |
CN108270508A (zh) * | 2016-12-30 | 2018-07-10 | 华为技术有限公司 | 一种循环冗余校验crc实现方法、装置及网络设备 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115549854A (zh) * | 2021-06-30 | 2022-12-30 | 上海寒武纪信息科技有限公司 | 循环冗余校验方法、装置、存储介质以及电子设备 |
CN114389752A (zh) * | 2021-12-15 | 2022-04-22 | 上海金仕达软件科技有限公司 | 循环冗余校验码生成方法、装置、设备、介质和程序产品 |
CN114944889A (zh) * | 2022-05-19 | 2022-08-26 | 成都汇蓉国科微***技术有限公司 | 一种基于可参数化配置的多功能通信数据校验***和方法 |
CN114944889B (zh) * | 2022-05-19 | 2023-07-04 | 成都汇蓉国科微***技术有限公司 | 一种基于可参数化配置的多功能通信数据校验***和方法 |
CN116861493A (zh) * | 2023-08-31 | 2023-10-10 | 上海芯联芯智能科技有限公司 | 一种校验码生成方法、处理器及电子设备 |
CN116861493B (zh) * | 2023-08-31 | 2024-03-29 | 上海芯联芯智能科技有限公司 | 一种校验码生成方法、处理器及电子设备 |
CN117453261A (zh) * | 2023-11-10 | 2024-01-26 | 珠海科创储能科技有限公司 | 设备的升级数据校验方法、存储介质及电子设备 |
CN117271201A (zh) * | 2023-11-22 | 2023-12-22 | 北京紫光芯能科技有限公司 | 循环冗余校验装置及循环冗余校验方法 |
CN117271201B (zh) * | 2023-11-22 | 2024-03-19 | 北京紫光芯能科技有限公司 | 循环冗余校验装置及循环冗余校验方法 |
CN117632273A (zh) * | 2024-01-26 | 2024-03-01 | 杭州瑞盟科技股份有限公司 | 集成电路的配置方法、***、集成电路的存储模块及介质 |
CN117632273B (zh) * | 2024-01-26 | 2024-04-30 | 杭州瑞盟科技股份有限公司 | 集成电路的配置方法、***、集成电路的存储模块及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112214349B (zh) | 2021-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112214349B (zh) | 一种数据循环冗余校验装置和方法 | |
JPH10107651A (ja) | ビタビ復号装置 | |
WO2010115371A1 (zh) | 一种循环冗余校验crc码的实现方法和装置 | |
Sun et al. | A table-based algorithm for pipelined CRC calculation | |
US7886210B2 (en) | Apparatus for pipelined cyclic redundancy check circuit with multiple intermediate outputs | |
US20050024241A1 (en) | Method and apparatus for generating gray code for any even count value to enable efficient pointer exchange mechanisms in asynchronous FIFO's | |
US6442729B1 (en) | Convolution code generator and digital signal processor which includes the same | |
US7577895B2 (en) | Initialization seed to allow data padding for cyclic redundancy code calculation | |
WO2018204898A1 (en) | Fast binary counters based on symmetric stacking and methods for same | |
US6370667B1 (en) | CRC operating calculating method and CRC operational calculation circuit | |
CN108809323B (zh) | 循环冗余校验码的生成方法和装置 | |
US7320101B1 (en) | Fast parallel calculation of cyclic redundancy checks | |
CN113472358B (zh) | 一种基于准循环生成矩阵的高速并行编码器 | |
US20050283507A1 (en) | Selective sequence generation method and apparatus | |
EP0431416A2 (en) | Apparatus and method for accessing a cyclic redundancy error check code generated in parallel | |
CN117200809B (zh) | 用于纠两个误码的rs码的低功耗钱搜索和错误估值电路 | |
Do et al. | High-speed parallel architecture for software-based CRC | |
CN113971015B (zh) | Uia2计算电路及其数据处理方法、芯片、电子设备及存储介质 | |
CN116382634B (zh) | 伪随机码生成电路、方法 | |
US8943392B2 (en) | Viterbi butterfly operations | |
Ahmad | On design of 8-bit CRC circuits equipped with primitive characteristic polynomials | |
Hajare et al. | Design and Implementation of Parallel CRC Generation for High Speed Application | |
Atrawalkar et al. | Design and Simulation of Parallel CRC Generation Architecture for High Speed Application | |
CN113467987A (zh) | 使用实时可重构生成多项式的快速crc码计算电路 | |
JP3348086B2 (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |