在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2349|回复: 2

[求助] 关于CRC编解码的问题

[复制链接]
发表于 2015-3-18 14:00:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x




  1. always @(posedge clk or negedge rst)
  2.   begin
  3.     if (!rst)
  4.       begin
  5.         crc_out <= 5'b00000;
  6.         //crc_alu <= 5'b01001;
  7.         crc_alu <= 5'b00000;
  8.         crc_done <= 1'b0;
  9.         data_out <= 1'bz;
  10.       end
  11.     else if (crc_en)
  12.       begin
  13.         if (!trans_end)
  14.           begin
  15.             crc_done <= 1'b0;
  16.             data_out <= data_in;
  17.             crc_tmp = data_in ^ crc_alu[4];
  18.             crc_alu[4] <= crc_alu[3];
  19.             crc_alu[3] <= crc_tmp ^ crc_alu[2];
  20.             for(i=2; i>0; i=i-1)
  21.               crc_alu[i] <= crc_alu[i-1];
  22.             crc_alu[0] <= crc_tmp;
  23.           end
  24.         else
  25.           begin
  26.             crc_out <= crc_alu;
  27.             crc_done <= 1'b1;
  28.           end
  29.       end
  30.   end


复制代码


这是一段自己写的CRC5代码。看了CRC的资料,也理解了CRC的计算方法,数值(软件)计算时,直接用需要校验的数据除以生成多项式得到最后的余式即可,即为CRC5校验码。但是用硬件实现时,我看资料上串行的采用LFSR(Linear feedback shift register)的结构,MSB优先依次输入,同时需要对寄存器先预置值,比如01001,但是通过这样的方法计算得到的CRC5为什么与手算的不一样呢?
比如说,待校验数据为0100 1101,我手算的CRC5结果为10001,但是verilog代码仿真的结果是00100,当我把预置值改为00000的时候,仿真的结果倒是和手算的一致。生成多项式为101001。所以我就不理解了,ISO_IEC18000-6C协议上都说需要预置来实现,可是两者结果为何不一致呢?到底需不需要预置值呢?请教一下各位朋友。
发表于 2015-3-19 08:57:47 | 显示全部楼层
其实crc计算公式有专门的代码生成网站,www.outputlogic.com;生成的代码,需要对输入和输出做相应的位序做处理一下,计算出来的校验值就和软件计算的校验值相同了!如果学习的话,还是多摸索一下!
 楼主| 发表于 2015-3-19 11:37:09 | 显示全部楼层
回复 2# 574920045


   好的 谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 23:14 , Processed in 0.015820 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表