资源描述:
《CRC16并行计算的Matlab推导.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.word可编辑.CRC16并行计算的Matlab推导本文使用的CRC16的生成多项式为:x16+x15+x2+1其对应的串行编码图如下图所示。假设输入数据的位宽为8比特,即{I7,I6,I5,I4,I3,I2,I1,I0},I为Input的首字母。I0表示最低比特位,I7表示最高比特位。在串行模式下,I0先输入CRC16计算模块,于是I0输入后各个寄存器的状态变化如下:D15'=D14+D15+I0D14'=D13D13'=D12D12'=D11D11'=D10D10'=D9D9'=D8D8'=D7D7'=D6D6'=D5D5'=D4.专业.专注..word可编辑.D4'=D3D3
2、'=D2D2'=D15+D1+I0D1'=D0D0'=D15+I0可以将以上表达式组成矩阵乘法的形式,则有:(1)其中,D为~构成的列向量,用转置矩阵的形式表示为:同理,是~构成的列向量,用转置矩阵的形式表示为:表达式(1)中的矩阵T,表示为:.专业.专注..word可编辑.表达式(1)中的矩阵S也是一个列向量,表示为:当I1输入后各个寄存器的状态为:以此类推,当I7输入后各寄存器的状态为:上式中可以看成两个矩阵A和B的相乘A*B,其中A=[T7ST6ST5ST4ST3ST2ST1ST0S]于是可以简化为而此时各个寄存器中的值就是最后要求的CRC16的值。对应的matlab程序如下:
3、.专业.专注..word可编辑.T8=mod((T^8),2);%计算结果对2取模,是因为我们执行的是二进制%加减运算T7=mod((T^7),2);T6=mod((T^6),2);T5=mod((T^5),2);T4=mod((T^4),2);T3=mod((T^3),2);T2=mod((T^2),2);T1=mod((T^1),2);T0=mod((T^0),2);S=[1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1]';T7S=mod((T7*S),2);T6S=mod((T6*S),2);T5S=mod((T5*S),2);T4S=mod((T4*S),2)
4、;T3S=mod((T3*S),2);T2S=mod((T2*S),2);T1S=mod((T1*S),2);T0S=mod((T0*S),2);.专业.专注..word可编辑.A=[T7S,T6S,T5S,T4S,T3S,T2S,T1S,T0S];B=eye(8);C=A*B;运算结果:所以将T8和C带入,就能得到各个寄存器中最后的值,这也就是CRC16的并行计算实现,最后用Verilog写出CRC16并行计算的代码:.专业.专注..word可编辑.掌握了上面的推导过程,就能很容易的进行扩展,只要知道了输入数据位宽以及生成多项式,我们就能很容易的用本文的方法推导出其对应的并行计算过
5、程。.专业.专注.