一、基本原理

CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。

二、几个基本概念

1、帧检验序列FCS(Frame Check Sequence):为了进行差错检验而添加的冗余码。

2、多项式模2运行:实际上是按位异或(Exclusive OR)运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。如:10011011 + 11001010 = 01010001。

3、生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方需要事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的最高位与最低位必须是1。常用的CRC码的生成多项式有:

CRC8=X8+X5+X4+1

CRC-CCITT=X16+X12+X5+1

CRC16=X16+X15+X5+1

CRC12=X12+X11+X3+X2+1

CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1

每一个生成多项式都可以与一个代码相对应,如CRC8对应代码:100110001

3.Verilog实现CRC32校验功能

    function    [31 : 0] CRC32_Gen;input   [ 7 : 0] data_in  ;    // Data Ininput   [31 : 0] code_in  ;    // Code In reg     [31 : 0] new_code ;    // New  CRC Code begin // CRC Code Generatenew_code[ 0] = data_in[6] ^ data_in[0] ^ code_in[24] ^ code_in[30];new_code[ 1] = data_in[7] ^ data_in[6] ^ data_in[1] ^ data_in[0] ^ code_in[24] ^ code_in[25] ^ code_in[30] ^ code_in[31];new_code[ 2] = data_in[7] ^ data_in[6] ^ data_in[2] ^ data_in[1] ^ data_in[0] ^ code_in[24] ^ code_in[25] ^ code_in[26] ^ code_in[30] ^ code_in[31];new_code[ 3] = data_in[7] ^ data_in[3] ^ data_in[2] ^ data_in[1] ^ code_in[25] ^ code_in[26] ^ code_in[27] ^ code_in[31];new_code[ 4] = data_in[6] ^ data_in[4] ^ data_in[3] ^ data_in[2] ^ data_in[0] ^ code_in[24] ^ code_in[26] ^ code_in[27] ^ code_in[28] ^ code_in[30];new_code[ 5] = data_in[7] ^ data_in[6] ^ data_in[5] ^ data_in[4] ^ data_in[3] ^ data_in[1] ^ data_in[0] ^ code_in[24] ^ code_in[25] ^ code_in[27] ^ code_in[28] ^ code_in[29] ^ code_in[30] ^ code_in[31];new_code[ 6] = data_in[7] ^ data_in[6] ^ data_in[5] ^ data_in[4] ^ data_in[2] ^ data_in[1] ^ code_in[25] ^ code_in[26] ^ code_in[28] ^ code_in[29] ^ code_in[30] ^ code_in[31];new_code[ 7] = data_in[7] ^ data_in[5] ^ data_in[3] ^ data_in[2] ^ data_in[0] ^ code_in[24] ^ code_in[26] ^ code_in[27] ^ code_in[29] ^ code_in[31];new_code[ 8] = data_in[4] ^ data_in[3] ^ data_in[1] ^ data_in[0] ^ code_in[0] ^ code_in[24] ^ code_in[25] ^ code_in[27] ^ code_in[28];new_code[ 9] = data_in[5] ^ data_in[4] ^ data_in[2] ^ data_in[1] ^ code_in[1] ^ code_in[25] ^ code_in[26] ^ code_in[28] ^ code_in[29];new_code[10] = data_in[5] ^ data_in[3] ^ data_in[2] ^ data_in[0] ^ code_in[2] ^ code_in[24] ^ code_in[26] ^ code_in[27] ^ code_in[29];new_code[11] = data_in[4] ^ data_in[3] ^ data_in[1] ^ data_in[0] ^ code_in[3] ^ code_in[24] ^ code_in[25] ^ code_in[27] ^ code_in[28];new_code[12] = data_in[6] ^ data_in[5] ^ data_in[4] ^ data_in[2] ^ data_in[1] ^ data_in[0] ^ code_in[4] ^ code_in[24] ^ code_in[25] ^ code_in[26] ^ code_in[28] ^ code_in[29] ^ code_in[30];new_code[13] = data_in[7] ^ data_in[6] ^ data_in[5] ^ data_in[3] ^ data_in[2] ^ data_in[1] ^ code_in[5] ^ code_in[25] ^ code_in[26] ^ code_in[27] ^ code_in[29] ^ code_in[30] ^ code_in[31];new_code[14] = data_in[7] ^ data_in[6] ^ data_in[4] ^ data_in[3] ^ data_in[2] ^ code_in[6] ^ code_in[26] ^ code_in[27] ^ code_in[28] ^ code_in[30] ^ code_in[31];new_code[15] = data_in[7] ^ data_in[5] ^ data_in[4] ^ data_in[3] ^ code_in[7] ^ code_in[27] ^ code_in[28] ^ code_in[29] ^ code_in[31];new_code[16] = data_in[5] ^ data_in[4] ^ data_in[0] ^ code_in[8] ^ code_in[24] ^ code_in[28] ^ code_in[29];new_code[17] = data_in[6] ^ data_in[5] ^ data_in[1] ^ code_in[9] ^ code_in[25] ^ code_in[29] ^ code_in[30];new_code[18] = data_in[7] ^ data_in[6] ^ data_in[2] ^ code_in[10] ^ code_in[26] ^ code_in[30] ^ code_in[31];new_code[19] = data_in[7] ^ data_in[3] ^ code_in[11] ^ code_in[27] ^ code_in[31];new_code[20] = data_in[4] ^ code_in[12] ^ code_in[28];new_code[21] = data_in[5] ^ code_in[13] ^ code_in[29];new_code[22] = data_in[0] ^ code_in[14] ^ code_in[24];new_code[23] = data_in[6] ^ data_in[1] ^ data_in[0] ^ code_in[15] ^ code_in[24] ^ code_in[25] ^ code_in[30];new_code[24] = data_in[7] ^ data_in[2] ^ data_in[1] ^ code_in[16] ^ code_in[25] ^ code_in[26] ^ code_in[31];new_code[25] = data_in[3] ^ data_in[2] ^ code_in[17] ^ code_in[26] ^ code_in[27];new_code[26] = data_in[6] ^ data_in[4] ^ data_in[3] ^ data_in[0] ^ code_in[18] ^ code_in[24] ^ code_in[27] ^ code_in[28] ^ code_in[30];new_code[27] = data_in[7] ^ data_in[5] ^ data_in[4] ^ data_in[1] ^ code_in[19] ^ code_in[25] ^ code_in[28] ^ code_in[29] ^ code_in[31];new_code[28] = data_in[6] ^ data_in[5] ^ data_in[2] ^ code_in[20] ^ code_in[26] ^ code_in[29] ^ code_in[30];new_code[29] = data_in[7] ^ data_in[6] ^ data_in[3] ^ code_in[21] ^ code_in[27] ^ code_in[30] ^ code_in[31];new_code[30] = data_in[7] ^ data_in[4] ^ code_in[22] ^ code_in[28] ^ code_in[31];new_code[31] = data_in[5] ^ code_in[23] ^ code_in[29];        // Output CRC32_Gen = new_code;end endfunction

直接调用function即可。

Verilog实现CRC32校验功能相关推荐

  1. 基于verilog的CRC校验(汇总)

    目录 原理 计算 检错与纠错 纠错实现 Verilog实现 本来想整理一下关于CRC校验的内容,但是发现前辈们写的都很好,本文对内容进行整理汇总. 原理 crc为什么能够检错和纠错,这背后有着深刻的数 ...

  2. 7zip自带hash校验功能

    7zip自带hash校验功能 前言 以前, 为了校验下载后文件的hash, 还专门去找hash工具. 今天查资料, 居然7zip自带了文件hash校验功能, 这多方便啊. 好像只能校验crc32, c ...

  3. crc32校验的c语言实现

    最近在做软件升级,需要对升级文件进行crc校验,就学习了crc的实现原理 crc就是一个数值,该数值用于检验数据的正确性,crc校验的原理就是将需要作校验的数据与一个数据模2相除,得到的余数即为校验值 ...

  4. 单片机给大文件做 CRC32 校验

    对文件进行CRC校验,有时候文件比较大,单片机RAM比较小,一次不能把文件全部读到缓冲区里,因此需要分批读取,分批做CRC校验,下面就实现了单片机对大文件进行CRC32校验的功能. tatic uns ...

  5. CRC32校验算法原理及计算说明

    本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列). 参考: 1.CRC32加密算法原理 2.CRC多项式对应代码 一.CRC基本原理(Cycl ...

  6. ant vue 设置中文_Ant Design Vue 添加区分中英文的长度校验功能

    原本的maxLength属性是不区分全角/半角字符的,对于一些可中英文混合输入地方而言不太合适.所以想找一个可区分全角/半角字符的校验,而且要保证一定的可重用性. 百度搜了一圈都没找到合适的现成的解决 ...

  7. element手机验证格式_基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)...

    前言 开发过程中遇到了一个需求,根据用户选择的联系方式,动态改变输入框的检验条件,并且整个表单是可以增加的 在线访问:动态表单校验 github(欢迎star): https://github.com ...

  8. php用户名框架,ThinkPHP框架结合Ajax实现用户名校验功能示例

    本文实例讲述了ThinkPHP框架结合Ajax实现用户名校验功能.分享给大家供大家参考,具体如下: 在模板文件中通过ajax获取到用户名,然后在控制器中将用户名与数据库比较,返回校验结果给模板文件. ...

  9. Java发送邮箱验证码、session校验功能

    本篇主要描述"发送邮箱验证码.session校验"相关前(htmljs)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2 ...

最新文章

  1. mysql 一键获取数据库表结构
  2. 心得丨学习人工智能AI需要哪些最基础的知识?
  3. javap(反汇编命令)详解【转】
  4. JavaScript速记
  5. 科学院和工程院公布188名新院士!外籍占比26%,中科院北大清华38人,阿里王坚当选...
  6. HBase性能优化方法总结(3):写表操作
  7. P3275-[SCOI2011]糖果【差分约束,负环】
  8. The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
  9. Win7系统还原声音图标的方法
  10. mfc多线程编程实例_多线程技术的PLC与PC的通讯方式
  11. application/x-www-form-urlencoded接口响应报文中文乱码
  12. 如何才能精通C++?原来这点才最重要!
  13. FFmpeg查看支持的封装、编解码器、滤镜(四)
  14. 码神之路博客项目部署
  15. chrome远程桌面linux,谷歌发布稳定版 Chrome 远程桌面
  16. lora网关以太网传输
  17. 请求头添加token
  18. java并发编程(三)--java中的锁(Lock接口和队列同步器AQS)
  19. 2021-2027全球与中国硬质PVC医药泡罩包装市场现状及未来发展趋势
  20. 计算机教程无线路由器桥接上网,计算机教程无线路由器桥接上网-路由器桥接设置图解...

热门文章

  1. Linux 命令之查看系统版本命令
  2. Google云端硬盘初学者使用Colaboratory出现的问题——指定已上传的文件夹
  3. 网络探针功能介绍 BTA IntraSec系统(转载)
  4. [Luogu2901][USACO08MAR]牛慢跑Cow Jogging Astar K短路
  5. ISAR Imaging of a Windmill-- Mesurement and Simulation
  6. 布尔型变量java怎么用_java中布尔型数据怎么用
  7. unity学习开发小球吃方块小游戏(从制作到发布程序,超详细全教程包你学会)
  8. crsd.bin Fail With Error CRS-1019 When ohasd Restarted (文档 ID 2291799.1)
  9. 数学分析教程史济怀练习10.2
  10. html5圆心坐标,圆心坐标的提取