下图为多项式 的CRC校验串行计算数字电路实现,待校验数据Din为2bit,由高至低位串行输入到电路中。提取多项式系数为10011,在CRC校验中,省略最高位系数,即用0011表示,对应到数字电路是需要4个D触发器,Reg3-Reg0,且在系数为1的D触发器前加入异或操作。
Q0,Q1,Q2,Q3为触发器的输出,设初值为Q0(0), Q1(0), Q2(0), Q3(0);
在第1个时钟上升沿,Din[1]被送入电路中,触发器输出发生变化:
Q0(1) = Din[1] ^ Q3(0);
Q1(1) = Q0(0) ^ Q3(0);
Q2(1) = Q1(0);
Q3(1) = Q2(0);
在第2个时钟上升沿,Din[0]被送入电路中, 触发器输出发生变化:
Q0(2) = Din[0] ^ Q3(1);
Q1(2) = Q0(1) ^ Q3(1);
Q2(2) = Q1(1);
Q3(2) = Q2(1);
经过2个时钟周期,电路的串行计算结束,校验码即触发器输出值,即Q0(2), Q1(2), Q2(2), Q3(2);
我们将上式联立:
Q0(2) = Din[0] ^ Q3(1) = Din[0] ^ Q2(0);
Q1(2) = Q0(1) ^ Q3(1) = Din[1] ^ Q3(0) ^ Q2(0);
Q2(2) = Q1(1) = Q0(0) ^ Q3(0);
Q3(2) = Q2(1) = Q1(0);
惊奇的发现只要知道待校验数据Din[1:0]和4个触发器初值Q0(0)~Q3(0),通过组合逻辑就可以直接得到校验码,这就是CRC校验码并行计算。
其他类型多项式的CRC并行计算公式也可以同理推导。