赞
踩
CRC参数 :POLY,INIT,REFIN,REFOUT,XOROUT。
POLY :十六进制多项式,省略最高位1,如 x8 + x2 + x + 1,二进制为1 0000 0111,省略最高位1,转换为十六进制为0x07。
INIT :CRC初始值,INIT与输入异或
REFIN :true或false,在进行计算之前,原始数据是否bit顺序翻转,如原始数据:0x34 = 0011 0100,如果REFIN为true,进行翻转之后为0010 1100 = 0x2c
REFOUT :true或false,运算完成之后,得到的CRC值是否进行翻转,如计算得到的CRC值:0x97 = 1001 0111,如果REFOUT为true,进行翻转之后为11101001 = 0xE9。
XOROUT :计算结果与此参数进行异或运算后得到最终的CRC值,和WIDTH位宽一致。
私有定义 d_in[7:0] 是输入的数据。
//第一轮
d0[7 :0] = d_in[7 :0] ^ INIT[7 :0];
d1[7 :0] = REFIN==TRUE ? {d0[0:7]} : d1[7:0] ;
d2[15:0] = {d1[7 :0],8'd0} ;
d3[15:0] = mod2div(d2[15:0],POLY[8:0]) ;
d4[7 :0] = XOROUT[7:0] ^ d3[7:0] ;
d5[7 :0] = REFOUT==TRUE ? {d4[0:7]} : d4[7:0] ;
CRC8[7:0] = d5[7 :0] ;
//第2轮
将INIT替换为上一轮的CRC8[7:0]结果。
//...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。