微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问个以太网CRC的问题

请问个以太网CRC的问题

时间:10-02 整理:3721RD 点击:
使用的是GMII接口,8bit数据宽度我在testbench中想发送一个ARP,测试我的程序
crc程序用的是http://www.easics.com上download下来的CRC32_D8

  1. module CRC32_D8;

  2.   // polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
  3.   // data width: 8
  4.   // convention: the first serial bit is D[7]
  5.   function [31:0] nextCRC32_D8;

  6.     input [7:0] Data;
  7.     input [31:0] crc;
  8.     reg [7:0] d;
  9.     reg [31:0] c;
  10.     reg [31:0] newcrc;
  11.   begin
  12.     d = Data;
  13.     c = crc;

  14.     newcrc[0] = d[6] ^ d[0] ^ c[24] ^ c[30];
  15.     newcrc[1] = d[7] ^ d[6] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[30] ^ c[31];
  16.     newcrc[2] = d[7] ^ d[6] ^ d[2] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[26] ^ c[30] ^ c[31];
  17.     newcrc[3] = d[7] ^ d[3] ^ d[2] ^ d[1] ^ c[25] ^ c[26] ^ c[27] ^ c[31];
  18.     newcrc[4] = d[6] ^ d[4] ^ d[3] ^ d[2] ^ d[0] ^ c[24] ^ c[26] ^ c[27] ^ c[28] ^ c[30];
  19.     newcrc[5] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[27] ^ c[28] ^ c[29] ^ c[30] ^ c[31];
  20.     newcrc[6] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[25] ^ c[26] ^ c[28] ^ c[29] ^ c[30] ^ c[31];
  21.     newcrc[7] = d[7] ^ d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[24] ^ c[26] ^ c[27] ^ c[29] ^ c[31];
  22.     newcrc[8] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[0] ^ c[24] ^ c[25] ^ c[27] ^ c[28];
  23.     newcrc[9] = d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[1] ^ c[25] ^ c[26] ^ c[28] ^ c[29];
  24.     newcrc[10] = d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[2] ^ c[24] ^ c[26] ^ c[27] ^ c[29];
  25.     newcrc[11] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[3] ^ c[24] ^ c[25] ^ c[27] ^ c[28];
  26.     newcrc[12] = d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ d[0] ^ c[4] ^ c[24] ^ c[25] ^ c[26] ^ c[28] ^ c[29] ^ c[30];
  27.     newcrc[13] = d[7] ^ d[6] ^ d[5] ^ d[3] ^ d[2] ^ d[1] ^ c[5] ^ c[25] ^ c[26] ^ c[27] ^ c[29] ^ c[30] ^ c[31];
  28.     newcrc[14] = d[7] ^ d[6] ^ d[4] ^ d[3] ^ d[2] ^ c[6] ^ c[26] ^ c[27] ^ c[28] ^ c[30] ^ c[31];
  29.     newcrc[15] = d[7] ^ d[5] ^ d[4] ^ d[3] ^ c[7] ^ c[27] ^ c[28] ^ c[29] ^ c[31];
  30.     newcrc[16] = d[5] ^ d[4] ^ d[0] ^ c[8] ^ c[24] ^ c[28] ^ c[29];
  31.     newcrc[17] = d[6] ^ d[5] ^ d[1] ^ c[9] ^ c[25] ^ c[29] ^ c[30];
  32.     newcrc[18] = d[7] ^ d[6] ^ d[2] ^ c[10] ^ c[26] ^ c[30] ^ c[31];
  33.     newcrc[19] = d[7] ^ d[3] ^ c[11] ^ c[27] ^ c[31];
  34.     newcrc[20] = d[4] ^ c[12] ^ c[28];
  35.     newcrc[21] = d[5] ^ c[13] ^ c[29];
  36.     newcrc[22] = d[0] ^ c[14] ^ c[24];
  37.     newcrc[23] = d[6] ^ d[1] ^ d[0] ^ c[15] ^ c[24] ^ c[25] ^ c[30];
  38.     newcrc[24] = d[7] ^ d[2] ^ d[1] ^ c[16] ^ c[25] ^ c[26] ^ c[31];
  39.     newcrc[25] = d[3] ^ d[2] ^ c[17] ^ c[26] ^ c[27];
  40.     newcrc[26] = d[6] ^ d[4] ^ d[3] ^ d[0] ^ c[18] ^ c[24] ^ c[27] ^ c[28] ^ c[30];
  41.     newcrc[27] = d[7] ^ d[5] ^ d[4] ^ d[1] ^ c[19] ^ c[25] ^ c[28] ^ c[29] ^ c[31];
  42.     newcrc[28] = d[6] ^ d[5] ^ d[2] ^ c[20] ^ c[26] ^ c[29] ^ c[30];
  43.     newcrc[29] = d[7] ^ d[6] ^ d[3] ^ c[21] ^ c[27] ^ c[30] ^ c[31];
  44.     newcrc[30] = d[7] ^ d[4] ^ c[22] ^ c[28] ^ c[31];
  45.     newcrc[31] = d[5] ^ c[23] ^ c[29];
  46.     nextCRC32_D8 = newcrc;
  47.   end
  48.   endfunction
  49. endmodule

复制代码



算出来的结果和 xilinx mac IP算出来的结果不一致。
请问可能哪里出了问题了,卡了好几天了

如果这个函数是正确的,就是计算过程问题,请看:
http://bbs.eetop.cn/thread-605912-1-1.html

这个可以直接用嘛?外面还需要一个初始的CRC32位值输进来,然后本次计算的结果再输给下一拍CRC计算

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top