CRC-64-ECMA用于单位数据和256位数据

时间:2019-07-25 18:47:16

标签: parallel-processing crc register-transfer-level

我有自动生成的串行和并行CRC代码。它是为1位数据和256位数据生成的64位CRC。我尝试检查对于相同的输入生成的两个CRC是否相同。因此,我输入1。我的问题是,是否在单个时钟周期内计算出CRC?两个CRC不匹配。当我将初始值更改为0而不是所有F时,它们确实匹配。我对两个CRC何时匹配感到困惑。

这是串行CRC 64代码:

模块CRC64_D1;

//多项式:x ^ 64 + x ^ 62 + x ^ 57 + x ^ 55 + x ^ 54 + x ^ 53 + x ^ 52 + x ^ 47 + x ^ 46 + x ^ 45 + x ^ 40 + x ^ 39 + x ^ 38 + x ^ 37 + x ^ 35 + x ^ 33 + x ^ 32 + x ^ 31 + x ^ 29 + x ^ 27 + x ^ 24 + x ^ 23 + x ^ 22 + x ^ 21 + x ^ 19 + x ^ 17 + x ^ 13 + x ^ 12 + x ^ 10 + x ^ 9 + x ^ 7 + x ^ 4 + x ^ 1 +1   //数据宽度:1   //约定:第一个串行位是D [0]   功能[63:0] nextCRC64_D1;

input Data;
input [63:0] crc;
reg [0:0] d;
reg [63:0] c;
reg [63:0] newcrc;

开始     d [0] =数据;     c = crc;

newcrc[0] = d[0] ^ c[63];
newcrc[1] = d[0] ^ c[0] ^ c[63];
newcrc[2] = c[1];
newcrc[3] = c[2];
newcrc[4] = d[0] ^ c[3] ^ c[63];
newcrc[5] = c[4];
newcrc[6] = c[5];
newcrc[7] = d[0] ^ c[6] ^ c[63];
newcrc[8] = c[7];
newcrc[9] = d[0] ^ c[8] ^ c[63];
newcrc[10] = d[0] ^ c[9] ^ c[63];
newcrc[11] = c[10];
newcrc[12] = d[0] ^ c[11] ^ c[63];
newcrc[13] = d[0] ^ c[12] ^ c[63];
newcrc[14] = c[13];
newcrc[15] = c[14];
newcrc[16] = c[15];
newcrc[17] = d[0] ^ c[16] ^ c[63];
newcrc[18] = c[17];
newcrc[19] = d[0] ^ c[18] ^ c[63];
newcrc[20] = c[19];
newcrc[21] = d[0] ^ c[20] ^ c[63];
newcrc[22] = d[0] ^ c[21] ^ c[63];
newcrc[23] = d[0] ^ c[22] ^ c[63];
newcrc[24] = d[0] ^ c[23] ^ c[63];
newcrc[25] = c[24];
newcrc[26] = c[25];
newcrc[27] = d[0] ^ c[26] ^ c[63];
newcrc[28] = c[27];
newcrc[29] = d[0] ^ c[28] ^ c[63];
newcrc[30] = c[29];
newcrc[31] = d[0] ^ c[30] ^ c[63];
newcrc[32] = d[0] ^ c[31] ^ c[63];
newcrc[33] = d[0] ^ c[32] ^ c[63];
newcrc[34] = c[33];
newcrc[35] = d[0] ^ c[34] ^ c[63];
newcrc[36] = c[35];
newcrc[37] = d[0] ^ c[36] ^ c[63];
newcrc[38] = d[0] ^ c[37] ^ c[63];
newcrc[39] = d[0] ^ c[38] ^ c[63];
newcrc[40] = d[0] ^ c[39] ^ c[63];
newcrc[41] = c[40];
newcrc[42] = c[41];
newcrc[43] = c[42];
newcrc[44] = c[43];
newcrc[45] = d[0] ^ c[44] ^ c[63];
newcrc[46] = d[0] ^ c[45] ^ c[63];
newcrc[47] = d[0] ^ c[46] ^ c[63];
newcrc[48] = c[47];
newcrc[49] = c[48];
newcrc[50] = c[49];
newcrc[51] = c[50];
newcrc[52] = d[0] ^ c[51] ^ c[63];
newcrc[53] = d[0] ^ c[52] ^ c[63];
newcrc[54] = d[0] ^ c[53] ^ c[63];
newcrc[55] = d[0] ^ c[54] ^ c[63];
newcrc[56] = c[55];
newcrc[57] = d[0] ^ c[56] ^ c[63];
newcrc[58] = c[57];
newcrc[59] = c[58];
newcrc[60] = c[59];
newcrc[61] = c[60];
newcrc[62] = d[0] ^ c[61] ^ c[63];
newcrc[63] = c[62];
nextCRC64_D1 = newcrc;

结束   终端功能 结束模块

0 个答案:

没有答案