1610|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

用于UDMA的CRC16算法代码 [复制链接]

本帖最后由 Aguilera 于 2019-1-8 17:26 编辑

在做PATA接口的硬盘控制器时,用UDMA传输需要CRC校验,在这里把算法贴出来,给需要的人。多项式为G(X)=X16+X12+X5+1,初始值为0x4aba;

用Verilog编写的函数代码如下:

[15:0] nextCRC;//test succussful 2008-6-1
    input [15:0] Data;
    input [15:0] CRC;
    reg [15:0] rDD;
    reg [15:0] crcResult;
    reg [15:0] Result;
  //begin
    rDD = Data;
    crcResult = CRC;
        Result[0] = rDD[15] ^ rDD[4] ^ rDD[11] ^ rDD[7] ^ rDD[3] ^crcResult[12] ^ crcResult[11] ^crcResult[8] ^ crcResult[4] ^ crcResult[0];
        Result[1] = rDD[14] ^ rDD[10] ^ rDD[6] ^ rDD[3] ^ rDD[2] ^crcResult[13] ^ crcResult[12] ^ crcResult[9] ^ crcResult[5] ^ crcResult[1];
  Result[2] = rDD[13] ^ rDD[9] ^ rDD[5] ^ rDD[2] ^ rDD[1] ^crcResult[14] ^crcResult[13] ^crcResult[10] ^ crcResult[6] ^ crcResult[2];
  Result[3] = rDD[12] ^ rDD[8] ^ rDD[4] ^ rDD[1] ^ rDD[0] ^crcResult[15] ^ crcResult[14] ^ crcResult[11] ^ crcResult[7] ^ crcResult[3];
  Result[4] = rDD[11] ^ rDD[7] ^ rDD[3] ^ rDD[0] ^crcResult[15] ^ crcResult[12] ^ crcResult[8] ^ crcResult[4];
  Result[5] = rDD[15] ^ rDD[11] ^ rDD[10] ^ rDD[7] ^ rDD[6] ^ rDD[4] ^ rDD[3] ^ rDD[2]^crcResult[13] ^ crcResult[12] ^ crcResult[11] ^ crcResult[9] ^ crcResult[8] ^ crcResult[5] ^ crcResult[4] ^ crcResult[0];
     Result[6] = rDD[14] ^ rDD[10] ^ rDD[9] ^ rDD[6] ^ rDD[5] ^ rDD[3] ^ rDD[2] ^ rDD[1] ^crcResult[14] ^crcResult[13] ^ crcResult[12] ^ crcResult[10] ^ crcResult[9] ^ crcResult[6] ^ crcResult[5] ^ crcResult[1];
     Result[7] = rDD[13] ^ rDD[9] ^ rDD[8] ^ rDD[5] ^ rDD[4] ^ rDD[2] ^ rDD[1] ^ rDD[0] ^crcResult[15] ^ crcResult[14] ^ crcResult[13] ^ crcResult[11] ^ crcResult[10] ^ crcResult[7] ^ crcResult[6] ^ crcResult[2];
  Result[8] = rDD[12] ^ rDD[8] ^ rDD[7] ^ rDD[4] ^ rDD[3] ^ rDD[1] ^ rDD[0] ^crcResult[15] ^ crcResult[14] ^ crcResult[12] ^ crcResult[11] ^ crcResult[8] ^ crcResult[7] ^ crcResult[3];
  Result[9] = rDD[11] ^ rDD[7] ^ rDD[6] ^ rDD[3] ^ rDD[2] ^ rDD[0]^crcResult[15] ^ crcResult[13] ^ crcResult[12] ^ crcResult[9] ^ crcResult[8] ^ crcResult[4];
  Result[10] = rDD[10] ^ rDD[6] ^ rDD[5] ^ rDD[2] ^ rDD[1] ^crcResult[14] ^crcResult[13] ^ crcResult[10] ^ crcResult[9] ^ crcResult[5];
  Result[11] = rDD[9] ^ rDD[5] ^ rDD[4] ^ rDD[1] ^ rDD[0] ^crcResult[15] ^ crcResult[14] ^ crcResult[11] ^ crcResult[10] ^ crcResult[6];
  Result[12] = rDD[15] ^ rDD[11] ^ rDD[8] ^ rDD[7] ^ rDD[0] ^crcResult[15] ^ crcResult[8] ^ crcResult[7] ^ crcResult[4] ^ crcResult[0];
  Result[13] = rDD[14] ^ rDD[10] ^ rDD[7] ^ rDD[6] ^crcResult[9] ^ crcResult[8] ^ crcResult[5] ^ crcResult[1];
  Result[14] = rDD[13] ^ rDD[9] ^ rDD[6] ^ rDD[5]  ^crcResult[10] ^ crcResult[9] ^ crcResult[6] ^ crcResult[2];
  Result[15] = rDD[12] ^ rDD[8] ^ rDD[5] ^ rDD[4] ^crcResult[11] ^ crcResult[10] ^ crcResult[7] ^ crcResult[3];
        nextCRC = Result;

// end

  end

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表