一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种循环冗余校验的计算方法和装置与流程

2022-03-02 01:40:45 来源:中国专利 TAG:


1.本发明涉及一种循环冗余校验(cyclic redundancy check,简称为crc)的计算方法,同时也涉及相应的计算装置,属于数字通信技术领域。


背景技术:

2.循环冗余校验是一种根据文件数据产生简短校验码的散列函数校验方法,主要用来校验数据传输或者保存后可能出现的错误。它的校验过程包括如下步骤:
3.(1)选择一个用于在接收端进行校验时,对接收的帧进行除法运算的除数;
4.(2)根据所选定的除数二进制位数(假设为k位,k为正整数),然后在要发送的数据帧(假设为m位,m为正整数)后面加上k-1位“0”,然后以这个加了k-1个“0”的新帧(一共是m k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的crc校验码,也称之为fcs(帧校验序列);
5.(3)再把这个crc校验码附加在原数据帧(就是m位的帧)后面,构建一个新帧发送到接收端,最后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没有余数,则表明该帧在传输过程中没出错,否则出现了差错。
6.在申请公布号为cn112350735a的中国专利申请中,公开了循环冗余校验的计算方法及系统,根据软件配置初始设置寄存器的初始值和多项式设置寄存器的值,将多项式设置寄存器的值输入crc运算寄存器中,以满足crc多项式运算;将待计算数据输入crc运算寄存器进行运算,其中crc运算寄存器包括n个crccal运算单元,n个crccal 运算单元通过tap信号依次做迭代运算;若输入寄存器输入第一个字节用于crc运算寄存器进行运算,将初始设置寄存器配置的初始值输入第一个crccal运算单元,若输入寄存器输入非第一个字节用于crc 运算寄存器进行运算,将第n个tap信号输入至第一个crccal运算单元。该技术方案通过软件对crc多项式和计算初值进行配置,使用一种数字电路,满足不同多项式的crc计算。
7.但是,现有crc算法在数字电路中的实现,是根据每个crc算法的多项式不同分类实现的。不同多项式的crc算法,需要使用不同的数字电路实现。对于不同的应用场景,可能需要多个不同多项式的crc 算法,这样使得这种方式实现的crc数字电路在不同应用场景中的适应性不好,实际产品中也很难针对每个多项式的crc算法专门设计一种数字电路与之对应,使得相关产品在应用场景中受到限制。


技术实现要素:

8.本发明所要解决的首要技术问题在于提供一种循环冗余校验的计算方法。
9.本发明所要解决的另一技术问题在于提供一种循环冗余校验的计算装置。
10.为实现上述目的,本发明采用以下的技术方案:
11.根据本发明实施例的第一方面,提供一种循环冗余校验的计算方法,包括如下步骤:
12.(1)根据循环冗余校验的生成多项式g(x)构造系数矩阵f;
13.(2)求出fn再取模2,所得到的矩阵为crc系数矩阵a;
14.(3)判断输入数据的宽度m与生成多项式的次数n的大小关系,当 n≥m时,对fn取模2,从crc系数矩阵a的前m列得到data系数矩阵b;当(x-1)n《m≤xn时,对fn、f
2n
、f
3n
…fxn
分别取模2,取f
xn
的后m- (x-1)n列,拼接在{f
(x-1)n


,f
3n
,f
2n
,fn}矩阵前,得到data系数矩阵b;其中,x为正整数且x≥2;
15.(4)根据如下循环冗余校验的计算公式,获得crc计算结果crc
out

16.crc
out
=a*crc
in

b*data
in
17.其中,a为crc系数矩阵,b为data系数矩阵,

为逻辑异或运算, crc
in
为上一次的crc计算结果,data
in
是待校验的输入数据。
18.其中较优地,所述步骤(1)中,根据生成多项式g(x)构造系数矩阵f:
[0019][0020]
其中,g’为生成多项式g(x)对应的多项式矩阵,e为单位矩阵。
[0021]
其中较优地,所述步骤(4)中,crc
in
为数字电路中crc
out
延时一周期的输出结果。
[0022]
其中较优地,所述步骤(4)中,二进制乘法用

&’实现,模2运算用按位异或

^’实现。
[0023]
根据本发明实施例的第二方面,提供一种循环冗余校验的计算装置,包括处理器和存储器,所述处理器读取所述存储器中的计算机程序,用于执行以下操作:
[0024]
(1)根据循环冗余校验的生成多项式g(x)构造系数矩阵f;
[0025]
(2)求出fn再取模2,所得到的矩阵为crc系数矩阵a;
[0026]
(3)判断输入数据的宽度m与生成多项式的次数n的大小关系,当 n≥m时,对fn取模2,从crc系数矩阵a的前m列得到data系数矩阵b;当(x-1)n《m≤xn时,对fn、f
2n
、f
3n
…fxn
分别取模2,取f
xn
的后m- (x-1)n列,拼接在{f
(x-1)n


,f
3n
,f
2n
,fn}矩阵前,得到data系数矩阵b;其中,x为正整数且x≥2;
[0027]
(4)根据如下循环冗余校验的计算公式,获得crc计算结果crc
out

[0028]
crc
out
=a*crc
in

b*data
in
[0029]
其中,a为crc系数矩阵,b为data系数矩阵,

为逻辑异或运算, crc
in
为上一次的crc计算结果,data
in
是待校验的输入数据。
[0030]
与现有技术相比较,本发明实施例提供的循环冗余校验的计算方法和装置在不增加硬件成本的前提下,采用经过特殊设计的矩阵相乘和按列移位算法兼容所有的循环冗余校验计算,可以做到使用一种数字电路,满足不同多项式的循环冗余校验计算需求。
附图说明
[0031]
图1为本发明实施例提供的循环冗余校验的计算方法的流程图;
[0032]
图2为本发明实施例提供的循环冗余校验的计算装置的示意图。
具体实施方式
[0033]
下面结合附图和具体实施例对本发明的技术内容进行详细具体的说明。
[0034]
如图1所示,本发明实施例所提供的循环冗余校验(crc)的计算方法,至少包括如下步骤:
[0035]
(1)根据循环冗余校验的生成多项式g(x)构造系数矩阵f;
[0036]
具体地说,假设生成多项式的次数为n,输入数据的宽度为m(m、n 均为正整数,下同)。根据生成多项式g(x)构造系数矩阵f:
[0037][0038]
其中,g’为生成多项式g(x)对应的多项式矩阵,e为单位矩阵。
[0039]
(2)求出fn再取模2,所得到的矩阵为crc系数矩阵a;
[0040]
(3)判断输入数据的宽度m与生成多项式的次数n的大小关系,当 n≥m时,对fn取模2,从所得到的矩阵(即crc系数矩阵a)的前m列获得data 系数矩阵b;当n《m≤2n时,对fn和f
2n
分别取模2,取f
2n
的后m-n列,拼接在fn矩阵前,可以得到data系数矩阵b;当2n《m≤3n时,对fn、f
2n
、f
3n
分别取模2,取f
3n
的后m-2n列,拼接在{f
2n
,fn}矩阵前,可以得到data系数矩阵b
……
类似地,当(x-1)n《m≤xn时,对fn、f
2n
、f
3n
…fxn
分别取模2,取f
xn
的后m-(x-1)n列,拼接在{f
(x-1)n


,f
3n
,f
2n
,fn}矩阵前,可以得到data系数矩阵b;其中x为正整数且x≥2;
[0041]
(4)根据如下循环冗余校验的计算公式,获得crc计算结果crc
out

[0042]
crc
out
=a*crc
in

b*data
in
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0043]
其中,a为crc系数矩阵,b为data系数矩阵,

为逻辑异或运算, crc
in
为上一次的crc计算结果,也就是数字电路中crc
out
延时一周期的输出结果,data
in
是待校验的输入数据。
[0044]
下面,我们以多项式g(x)=x8 x7 x4 x3 x1 1为例进行具体说明。
[0045]
在该实施例中,多项式次数n=8,数据宽度m=8;则相应的系数矩阵f如下式所示:
[0046][0047]
针对上述的系数矩阵f,求出fn再取模2,求得矩阵为crc系数矩阵a。接下来,通过矩阵运算后的规律可以发现fn再取模2后的前m列等于data 系数矩阵b,因此通过上述方法可以得到data系数矩阵b。
[0048]
具体地说,在上述实施例中,crc系数矩阵a=(fn取模2)=(f8取模2,此时n=8);data系数矩阵b=(fn取模2)=(f8取模2,此时n=8)。
[0049]
即,
[0050]
f2取模2,得到
[0051]
f3取模2,得到
[0052]
f3取模2,得到
[0053]
……
[0054]
f8取模2,得到
[0055]
依此类推,将矩阵fn表示成列矩阵形式,即:
[0056][0057][0058]
由归纳法可以得出:
[0059][0060][0061]
其中,
[0062][0063][0064][0065][0066][0067][0068][0069]
[0070]
在数字电路中,二进制乘法用

&’实现,模2运算用按位异或

^’实现。定义一个二维8x8数组,已知矩阵f,可以用递归描述法用硬件语言描述出这样,我们可以得到crc系数矩阵a。利用同样的方法,可以求得data系数矩阵b。
[0071]
所以,相应的crc计算公式可以描述为:
[0072]
crc
out
=a&crc
in
^b&data
in
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0073]
在此,仍然以上述多项式g(x)=x8 x7 x4 x3 x1 1为例,crc 系数矩阵a=f8取模2,即
[0074]
所以,crc计算结果可以表示如下:
[0075]
crcout[7]= crcin[0]^crcin[1]^crcin[2]^crcin[6]^datain[0]^datain[1]^data in[2]^datain[6]
[0076]
crcout[6]=crcin[2]^crcin[5]^crcin[6]^datain[2]^datain[5]^datain[6]
[0077]
crcout[5]= crcin[1]^crcin[4]^crcin[5]^datain[1]^datain[4]^datain[5]
[0078]
crcout[4]=crcin[0]^crcin[3]^crcin[4]^datain[0]^datain[3]^datain[4]
[0079]
crcout[3]= crcin[0]^crcin[1]^crcin[3]^crcin[6]^crcin[7]^datain[0]^datai n[1]^datain[3]^datain[6]^datain[7]
[0080]
crcout[2]=crcin[1]^crcin[5]^datain[1]^datain[5]
[0081]
crcout[1]= crcin[0]^crcin[4]^crcin[7]^datain[0]^datain[4]^datain[7]
[0082]
crcout[0]= crcin[0]^crcin[1]^crcin[2]^crcin[3]^crcin[7]^datain[0]^datai n[1]^datain[2]^datain[3]^datain[7]
[0083]
当m、n取值不同时,也可以依据上面描述的计算方法获得crc计算结果。在此,我们以多项式g(x)=x8 x7 x4 x3 x1 1,多项式次数n=8,数据宽度m=12为例说明,此时n《m≤2n。
[0084]
则crc系数矩阵a=(fn取模2)=(f8取模2);
[0085]
data系数矩阵b=(f
2n
取模2)取后m-n列拼接在(fn取模2)前,也就是f
16
取模2,取后4列拼接在f8取模2的矩阵前。
[0086]
将矩阵fn表示成列矩阵形式:
[0087][0088][0089]
由归纳法可以得出:
[0090][0091][0092][0093]
其中,
[0094][0095][0096][0097][0098][0099][0100][0101][0102][0103][0104][0105][0106][0107][0108][0109]
f8取模2,则相应的crc系数矩阵如下:
[0110][0111]f16
取模2,则相应的crc系数矩阵如下:
[0112][0113]
取后四列拼接在f8前,则data系数矩阵如下:
[0114][0115]
所以,crc计算结果可以表示如下:
[0116]
crcout[7]= crcin[0]^crcin[1]^crcin[2]^crcin[6]^datain[0]^datain[1]^data in[2]^datain[6]^datain[11]
[0117]
crcout[6]= crcin[2]^crcin[5]^crcin[6]^datain[2]^datain[5]^datain[6]^dat ain[10]
[0118]
crcout[5]= crcin[1]^crcin[4]^crcin[5]^datain[1]^datain[4]^datain[5]^dat ain[9]^datain[11]
[0119]
crcout[4]= crcin[0]^crcin[3]^crcin[4]^datain[0]^datain[3]^datain[4]^dat ain[8]^datain[10]^datain[11]
[0120]
crcout[3]= crcin[0]^crcin[1]^crcin[3]^crcin[6]^crcin[7]^datain[0]^datai n[1]^datain[3]^datain[6]^datain[7]^datain[9]^datain[10]
[0121]
crcout[2]= crcin[1]^crcin[5]^datain[1]^datain[5]^datain[8]^datain[9]
[0122]
crcout[1]= crcin[0]^crcin[4]^crcin[7]^datain[0]^datain[4]^datain[7]^dat ain[8]
[0123]
crcout[0]= crcin[0]^crcin[1]^crcin[2]^crcin[3]^crcin[7]^datain[0]^datai n[1]^datain[2]^datain[3]^datain[7]。
[0124]
在上述循环冗余校验的计算方法的基础上,本发明进一步提供一种循环冗余校验的计算装置。如图2所示,该计算装置包括一个或多个处理器21和存储器22。其中,存储器22与处理器21耦接,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器21执行,使得所述一个或多个处理器21实现如上述实施例中的循环冗余校验的计算方法。
[0125]
其中,处理器21用于控制该计算装置的整体操作,以完成上述循环冗余校验的计算方法的全部或部分步骤。该处理器21可以是中央处理器 (cpu)、图形处理器(gpu)、现场可编程逻辑门阵列(fpga)、专用集成电路(asic)、数字信号处理(dsp)芯片等。存储器22用于存储各种类型的数据以支持在该计算装置的操作,这些数据例如可以包括用于在该计算装置上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器22可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(sram)、电可擦除可编程只读存储器(eeprom)、可擦除可编程只读存储器(eprom)、可编程只读存储器 (prom)、只读存储器(rom)、磁存储器、快闪存储器等。
[0126]
在一个示例性实施例中,计算装置具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现,用于执行上述的循环冗余校验的计算方法,并达到如上述方法一致的技术效果。一种典型的实施例为计算机。具体地说,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0127]
在另一个示例性实施例中,本发明还提供一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述任意一个实施例中的循环冗余校验的计算方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器,上述程序指令可由计算装置的处理器执行以完成上述的循环冗余校验的计算方法,并达到如上述方法一致的技术效果。
[0128]
与现有技术相比较,本发明实施例提供的循环冗余校验的计算方法和装置在不增加硬件成本的前提下,采用经过特殊设计的矩阵相乘和按列移位算法兼容所有的循环冗余
校验计算,可以做到使用一种数字电路,满足不同多项式的循环冗余校验计算需求。
[0129]
本领域的技术人员可以清楚地了解到,虽然本发明提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。
[0130]
在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0131]
需要说明的是,本发明中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于计算装置及计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0132]
上面对本发明所提供的循环冗余校验的计算方法和装置进行了详细的说明。对本领域的一般技术人员而言,在不背离本发明实质内容的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献