Altera_Forum
Honored Contributor
15 years agoFCS(crc32) ethernet on cycloneII?
I have tested free internet codes for FCS ethernet, but it don't work.
What's wrong? HELP me please gurus! CRC32 FOR 1 FIXED BYTE(0X1A) rstn->always 0 enable->always 1 init->1 time 1 short pulse for init crc module DataIN->0x1A CRC generated from module-> 0x2D93B212 CORRECT CRC->0xf716602f internet code: module crc32_data8 ( clk, rstn, enable, init, d, //datain crc, //crc match //set if crc=0 ); input clk; input rstn; input enable; input init; input [7:0] d; output [31:0] crc; output match;   wire [31:0] c; wire [31:0] newcrc; reg [31:0] crc; reg match;   always @ (posedge clk ) begin if(rstn) begin crc [31:0] <= {32{1'b1}}; match <= 1'b0; end else begin if(init) begin crc [31:0] <= {32{1'b1}}; match <= 1'b0; end else if(enable) begin crc <= newcrc; if (crc==32'd0) match<=1'b1; else match<=1'b0; end end end   assign c = crc; assign newcrc[0] = d[6] ^ d[0] ^ c[30] ^ c[24]; assign newcrc[1] = d[7] ^ d[6] ^ d[1] ^ d[0] ^ c[31] ^ c[30] ^ c[25] ^ c[24]; assign newcrc[2] = d[7] ^ d[6] ^ d[2] ^ d[1] ^ d[0] ^ c[31] ^ c[30] ^ c[26] ^ c[25] ^ c[24]; assign newcrc[3] = d[7] ^ d[3] ^ d[2] ^ d[1] ^ c[31] ^ c[27] ^ c[26] ^ c[25]; assign newcrc[4] = d[6] ^ d[4] ^ d[3] ^ d[2] ^ d[0] ^ c[30] ^ c[28] ^ c[27] ^ c[26] ^ c[24]; assign newcrc[5] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[31] ^ c[30] ^ c[29] ^ c[28] ^ c[27] ^ c[25] ^ c[24]; assign newcrc[6] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[31] ^ c[30] ^ c[29] ^ c[28] ^ c[26] ^ c[25]; assign newcrc[7] = d[7] ^ d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[31] ^ c[29] ^ c[27] ^ c[26] ^ c[24]; assign newcrc[8] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[28] ^ c[27] ^ c[25] ^ c[24] ^ c[0]; assign newcrc[9] = d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[29] ^ c[28] ^ c[26] ^ c[25] ^ c[1]; assign newcrc[10] = d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[2] ^ c[29] ^ c[27] ^ c[26] ^ c[24]; assign newcrc[11] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[3] ^ c[28] ^ c[27] ^ c[25] ^ c[24]; assign newcrc[12] = d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ d[0] ^ c[4] ^ c[30] ^ c[29] ^ c[28] ^ c[26] ^ c[25] ^ c[24]; assign newcrc[13] = d[7] ^ d[6] ^ d[5] ^ d[3] ^ d[2] ^ d[1] ^ c[5] ^ c[31] ^ c[30] ^ c[29] ^ c[27] ^ c[26] ^ c[25]; assign newcrc[14] = d[7] ^ d[6] ^ d[4] ^ d[3] ^ d[2] ^ c[6] ^ c[31] ^ c[30] ^ c[28] ^ c[27] ^ c[26]; assign newcrc[15] = d[7] ^ d[5] ^ d[4] ^ d[3] ^ c[7] ^ c[31] ^ c[29] ^ c[28] ^ c[27]; assign newcrc[16] = d[5] ^ d[4] ^ d[0] ^ c[8] ^ c[29] ^ c[28] ^ c[24]; assign newcrc[17] = d[6] ^ d[5] ^ d[1] ^ c[9] ^ c[30] ^ c[29] ^ c[25]; assign newcrc[18] = d[7] ^ d[6] ^ d[2] ^ c[31] ^ c[30] ^ c[26] ^ c[10]; assign newcrc[19] = d[7] ^ d[3] ^ c[31] ^ c[27] ^ c[11]; assign newcrc[20] = d[4] ^ c[28] ^ c[12]; assign newcrc[21] = d[5] ^ c[29] ^ c[13]; assign newcrc[22] = d[0] ^ c[24] ^ c[14]; assign newcrc[23] = d[6] ^ d[1] ^ d[0] ^ c[30] ^ c[25] ^ c[24] ^ c[15]; assign newcrc[24] = d[7] ^ d[2] ^ d[1] ^ c[31] ^ c[26] ^ c[25] ^ c[16]; assign newcrc[25] = d[3] ^ d[2] ^ c[27] ^ c[26] ^ c[17]; assign newcrc[26] = d[6] ^ d[4] ^ d[3] ^ d[0] ^ c[30] ^ c[28] ^ c[27] ^ c[24] ^ c[18]; assign newcrc[27] = d[7] ^ d[5] ^ d[4] ^ d[1] ^ c[31] ^ c[29] ^ c[28] ^ c[25] ^ c[19]; assign newcrc[28] = d[6] ^ d[5] ^ d[2] ^ c[30] ^ c[29] ^ c[26] ^ c[20]; assign newcrc[29] = d[7] ^ d[6] ^ d[3] ^ c[31] ^ c[30] ^ c[27] ^ c[21]; assign newcrc[30] = d[7] ^ d[4] ^ c[31] ^ c[28] ^ c[22]; assign newcrc[31] = d[5] ^ c[29] ^ c[23]; endmodule