微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教关于CRC的实现

请教关于CRC的实现

时间:10-02 整理:3721RD 点击:

以生成多项式x^3+x^1+1(即4’b1011)为例,如果是数据5‘b11001;
设CRC初值为3‘b111,
CRC0<=DATA_IN ^ CRC2;
CRC1<=DATA_IN ^ CRC2 ^ CRC0;
CRC2<=CRC1;



当数据输入完后结果是3'b100,这个数据对吗?感觉不错啊
反正在用同样的方法做以太网的CRC32时得到的数据,就跟用ALTERA的MAC核自动生成的CRC不同,不明白怎么回事!



    网上好像能下载到相关的源代码!

有没有高人指教一下,怎么算都不对,网上还有一种方法,查表法也试过,还是不对,受不了了

crc32  <=  mytab[crc32[7:0]^tx_data[12095:12088]] ^ {8'h00,crc32[31:8]};
tx_data <= {tx_data[12087:0],8'h00};
其中mytab是表,正反表都试过,没一个是对的

www.outputlogic.com


这个是将所有的数据一下计算出来 ,对于长数据这个参考意义不大啊,数据太多的话不可能这样去算吧

可以用并行计算的方法,简化CRC的设计


我自己来回答吧:
第一步将需要传输的数据按如下的顺序通过寄存器:



2,当数据传输完成后,对CRC里的数据以字节为单位倒序后再取反,如下
CRC[7:0] = ~CRC[0:7];
CRC[15:8] = ~CRC[8:15];
CRC[23:16] = ~CRC[16:23];
CRC[31:24] = ~CRC[24:31];
3,经过以上处理后得到的CRC即为以太网发送里需要的CRC

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

网站地图

Top