了解使用LFSR实现CRC生成的两种不同方法

时间:2014-08-20 22:48:08

标签: crc shift-register

使用线性反馈移位寄存器(LFSR)实现CRC生成有两种方法,如图CRC LFSR所示。该图中的生成多项式系数为100111,红色" +"圆圈是独家或运营商。两者的初始化寄存器值均为00000。

例如,如果输入数据位流是10010011,则A和B都将给出1010的CRC校验和。差异是A完成8个移位,而B 8 + 5 = 13移位,因为附加了5个零输入数据。我很容易理解B,因为它非常模仿模2分区。但是,我无法用数学方式理解A如何以5个较少的班次给出相同的结果。我听说有人在说A利用了预先附加的零,但我没有得到它。有谁可以向我解释一下?谢谢!

2 个答案:

答案 0 :(得分:2)

以下是我的快速理解。

设p(x)为m阶输入消息(即m + 1比特),G(x)为阶数n的CRC多项式。这种消息的CRC结果由

给出
  

C(x)=(M(x)* x n )%G(x)

这就是电路B正在实施的。需要额外的5个周期是因为x n 操作。

电路A尝试做更聪明的事情,而不是遵循这种方法。它试图解决问题

  

如果C(x)是M(x)的CRC,那么消息{M(x),D}的CRC是什么

其中D是新位。因此,它试图一次解决一个比特而不是整个消息,如电路b的情况。因此,对于8位消息,电路A仅需要8个周期。

既然你已经理解为什么电路B看起来像它那样,那么让我们看一下电路A.数学,特别是你的情况,对于在CRC上对消息M(x)添加位D的效果如下< / p>

  

让当前CRC C(x)为{c4,c3,c2,c1,c0},并将新位移位为D
  NewCRC = {M(x),D} * x 5 )%G(x)=(({M(x),0} * x 5 )%G (x))XOR((D * x 5 )%G(x))
  这是({c3,c2,c1,c0,0} XOR {0,0,c4,c4,c4})XOR({0,0,D,D,D})
  这是{c3,c2,c1 ^ c4 ^ D,c0 ^ c4 ^ D,c4 ^ D}

即。 LFSR电路A。

答案 1 :(得分:0)

您可以说架构 (A) 是通过将 polyn 的 MSB 与 Message 的 MSB 对齐来实现模除法的,因此它实现了如下所示的内容(在我的示例中,我实际上有另一个 crc polyn):

enter image description here

但是在架构 (B) 中,您可以说我们尝试预测消息的 MSB,因此我们将 CRC polyn 的 MSB 与消息的 MSB-1 对齐,如下所示:

enter image description here

我可以在 this tutorial

中推荐有关此操作的详细信息