查表法计算CRC
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在硬件实现中,CRC 通常采用线性反馈移位寄存器实现。其中一个单元对应CRC 的每一比特,图3-2给出了8比特寄存器。对于移位寄存器中的每一单元,如果在发生器多项式中D 的某次幂为1,那么到下一个单元的连接要经过一个异或门(XOR)。对于每一传输块,首先将移位寄存器置零;接传输块数据输入移位寄存器,当传输块的所有比特全部输入移位寄存器后,移位寄存器的存储内容就是所要求的CRC 比特。这些比特以倒序传输,如图3-2,首先传输在最左寄存器中的CRC 比特。
图3-2 8比特CRC 生成移位寄存器
对于上述算法,当输入1个比特时,要经过一系列的异或和移位,才能完成。上图只是8比特CRC 的实现图,考虑到g CRC24A (D)的多项式,实现更为复杂。而下行峰值速率又相对很高,采用这种方法显然是达不到需求的速率的。下面介绍一种更为高效的查表法[17],多核DSP 计算CRC 也使用了查表法。
设传输块有k 比特,CRC 比特数为k n -;下面是按4比特查表计算24比特CRC 的过程。对于传输块中的二进制序列,可以用下面的多项式表示:
()1011222k k k k m x m m m m --=++++ 式(3-1) 将上式每4个比特组合在一起,如下所示:
()44(1)4011222n n n n m x m m m m --=++
++ 式(3-2)
求此序列的24比特CRC 时,先乘以242(左移24位)后,再除以CRC 的生成多项式()x g ,所得到的余数即为所求的CRC 码。如下式所示:
()()()()
()
242424
2444(1)
01222222n n n m x m m m g x g x g x g x -=+++
式(3-3) 设:()()()()24
0002r x m Q x g x g x =+
,其中()0r x 为24位二进制余数;将它代入式(3-3)可得:
()()()()()()()()()()()()2424
24044(1)1042424
044(1)102222222222
n n n n
n n m x r x m m Q x g x g x g x g x r x m m Q x g x g x g x --⎡⎤=++++⎢⎥⎣
⎦⎧⎫⎪⎪=++++⎨⎬⎪⎪⎩⎭
式(3-4)
因为,()()()()()4204244000002[2]222h l h l r x r x r x r x r x =+=+ 式(3-5)
其中()0h r x 是()0r x 的高4位,()0l r x 是()0r x 的低20位。将式(3-5)带入式(3-4)经整理得:
()()()()()()()
24424
24
044(1)01022[]2222
l n
n h n m x r x r m m Q x g x g x g x g x -⎧⎫+⎪⎪=++++⎨⎬⎪⎪⎩
⎭ 式(3-6) 再设:()()()()()()42401
0112[]2l h r x r x r m Q x g x g x g x ++=+,其中()1r x 仍是24位二进制余数。根据上面的推导过程,以次类推可得:
()()
()()()()
()
24
44(1)01222n n n n m x r x Q x Q x Q x g x g x -=++++
式(3-7) 其中24位二进制余数()n r x 即为要求的CRC 比特。式(3-7)是按4比特计算CRC 比特的递推公式。从式子可以看出,输入本4比特后的CRC 比特等于输入本4比特前的CRC 码的低20位左移4位后再加上它右移20位(即取高4位)与将要输入字节之和后的CRC 值。所以,如果将4位二进制序列的CRC 全部计算出来再存储在表中,则可以通过查表来计算CRC 。