大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来基于FPGA 的CRC校验码生成器设计,话不多说,上货。

一、概述

CRC,即Cyclic Redundancy Check,循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定。二、CRC校验的基本原理CRC码是由两部分组成的,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的r bit即为校验位。如:(7,3)码:110 1001,前三位110为信息码,1001为校验码。三、校验码的生成规则1) 将原信息码左移r bit,右侧补零,如 110--> 110 0000;2) 用110 0000除以g(x)  (注意,使用的是模2除法,见下文),得到的余数即为CRC校验码;3) 将校验码续接到信息码的尾部,形成CRC码。四、关于生成多项式g(x)在产生CRC校验码时,要用到除法运算,一般来说,这是比较麻烦的,因此,把二进制信息预先转换成一定的格式,这就是CRC的多项式表示。二进制数表示为生成多项式的系数,如下:      所有二进制数均被表示为一个多项式,x仅是码元位置的标记,因此我们并不关心x的取值,称之为码多项式。(我没研究过CRC代数推理过程,没体会到用多项式计算的方便之处,这里要学会的就是给出生成多项式g(x),能写出对应的二进制即可)常见的生成多项式如下:五、关于模2除法模2运算就是加法不考虑进位,减法不考虑借位。   1)加法运算:     0+0=0        0+1=1        1+0=1        1+1=0例如0101+0011=0110,列竖式计算:
          0 1 0 1
      + 0 0 1 1
      ──────
          0 1 1 02)减法运算:      0-0=0        0-1=1        1-0=1        1-1=0  例如0110-0011=0101,列竖式计算:
         0 1 1 0
     -  0 0 1 1
       ──────
         0 1 0 13)乘法运算0×0=0        0×1=0        1×0=0        1×1=1多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。例如1011×101=100111,列竖式计算:   4)除法运算:
       0÷1=0        1÷1=1多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2除法运算法则,那么余数首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列竖式计算:掌握了上面的运算规则,你可以尝试计算一个复杂一点的,如下:       如果得到的余数结果正确,你掌握的东西就够用了。六、CRC-CCITT的硬件实现CRC-CCITT的生成多项式为:   对应的二进制数就是上面复杂运算中那个除数。由刚才的计算可知,对于8 bit的数据 0xaa,它的CRC校验码为0001 0100 1010 0000,下面用verilog来实现,看能否得到这个结果:要实现这一过程,仍然需要LFSR电路,参看《FPGA设计中,产生LFSR伪随机数》中关于该电路特性的介绍,如果你不需要了解原理,直接略过即可;有所改进的地方就是,可以将伪随机数发生器看作一个Moore型状态机,它的输出只与当前的状态有关;而此时利用LFSR电路,需要引入数据输入端,输出不仅取决于当前的状态,还取决于输入信号,相当于Mealy型状态机,如下图:  注意对比与伪随机数产生器中该反馈支路的区别。反馈项gr+1gr……g0为生成多项式的系数,依然是1代表存在反馈,0代表不存在反馈;此电路可以完成上述的模2除法操作,若我们要求0xaa的CRC校验码,则从高位到低位顺序输入0xaa共8 bit后,D15……D0中的数据即为所要求的余数,即CRC校验位。七、verilog描述如果用时序电路串行实现,则8 bit数据要移位8次,就需要8个clk,效率低下,为了能在一个时钟周期输出结果,必须采用组合电路,当然,这是以空间换时间的方法,由于使用了for循环8次,直观的讲电路规模将扩大8倍。仿真结果如下:得到的是数据0xaa和0xf0的CRC校验码,为验证结果的正确性,可以按照模2法则手工计算一下。八、其他例子同样给出一个4 bit信息位,5 bitCRC码的(9,4)码的程序和仿真结果,程序的流程与上述流程完全一样:       说明:细心的大侠可能发现,本篇对LFSR电路能完成模2求余操作的原因避而不谈,不是因为不告诉你,是因为目前也不是很清楚,工科背景对数学推理实在是有点不知所云,尤其是看到国内教材那好几页的公式的时候,如果您有通俗易懂的讲解LFSR电路由来与应用的文章,注意是深入浅出的,请大力推荐,在此感谢。END后续会持续更新,带来Vivado、 ISE、Quartus II 、Candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

往期推荐

  • FPGA零基础学习:VGA协议驱动设计

  • FPGA零基础学习:IIC协议驱动设计

  • Zynq:用PS控制DDR3内存读写

  • 举例分析 Intel FPGA 和 Xilinx FPGA 的区别

  • 新谈:为什么你觉得FPGA难学?如何入门?

FPGA技术江湖广发江湖帖

无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。

FPGA技术江湖微信交流群

加群主微信,备注职业+方向+名字进群

FPGA技术江湖QQ交流群

备注地区+职业+方向+名字进群

32位crc校验码程序_基于FPGA的CRC校验码生成器设计相关推荐

  1. 源码系列:基于FPGA的自动售货机设计(附源工程)

    今天给大侠带来基于FPGA的自动售货机设计,附源码,获取源码,请在"FPGA技术江湖"公众号内回复" 自动售货机设计源码",可获取源码文件.话不多说,上货. 设 ...

  2. verilog 算法加速模块设计流程_基于FPGA的图像加速器的设计

    基于 FPGA 的图像加速器的设计 摘 要 介绍了一种基于 FPGA 的图像加速器的设计.本文硬件加速器的实质是通过流水线 设计来减少多余的操作达到加速的目的的, 内存是由 DMA 控制器访问, 之后 ...

  3. 小数分频器vhdl实现_基于FPGA的小数分频器的设计与实现.doc

    基于FPGA的小数分频器的设计与实现.doc 基于FPGA的小数分频器的设计与实现 [摘要]本文首先分析了现有小数分频器的优缺点,在此基础上提出了一种改进型小数分频器的设计方法.同时结合VHDL文本输 ...

  4. fir数字滤波器设计与软件实现_基于FPGA低通滤波器的FIR的设计

    基于FPGA低通滤波器FIR的设计 1 滤波器的特征参数介绍 图1 低通滤波器特征参数如图1所示,低通滤波器的通带截止频率为ωp ,通带容限为α1,阻带截止频率为ωs,阻带容限为α2.通带定义为|ω| ...

  5. 投票源码程序_基于用户投票的排名算法

    基于用户投票的排名算法(一):Delicious和Hacker News 互联网的出现,意味着"信息大爆炸". 用户担心的,不再是信息太少,而是信息太多.如何从大量信息之中,快速有 ...

  6. 室内定位程序_基于增强现实的室内导航系统如何设计架构

    随着技术的不断发展,在未来几年中,基于AR的室内导航应用在不同消费领域会出现大规模的增长. 室内导航与室外导航在复杂程度上有很大不同.对于户外导航,数百万人目前使用这项技术,因为它对性能要求不高;现代 ...

  7. 基于TI TMS320F2837x系列的单/双核32位浮点MCU控制器+ Xilinx Spartan-6低功耗FPGA核心板

    由创龙自主研发的SOM-TL2837xF核心板,大小仅有72mm*44mm.采用沉金无铅工艺的8层板设计,专业的PCB Layout保证信号完整性的同时,经过严格的质量控制,非常适用于高速数据采集与处 ...

  8. C++课程设计实训_基于多态书籍信息管理系统的设计与实现、附源码、有过程截图

    C++课程设计实训_基于多态书籍信息管理系统的设计与实现.附源码,有过程截图 书籍信息管理系统的设计与实现(基于多态) 学生姓名: 学 号: 指导老师: 所 在 系: 专 业: 班 级: C++课程设 ...

  9. 单片机控制两个步进电机画圆_基于单片机的步进电机转速控制设计详解(附程序)...

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角.这 ...

  10. 【解决方案】64位Linux系统下无法编译、运行32位C、C++程序的解决办法

    [故障] 1. 从32位系统里面复制过来的32位C或C++程序无法运行,提示找不到程序文件,或找不到libstdc++.so.6库 [oct1158@oct1158-fedora 32env]$ ./ ...

最新文章

  1. 在指定的查找范围内获取DOM元素
  2. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例
  3. vue-beauty 的v-data-table数据单元不换行
  4. 【渝粤题库】国家开放大学2021春3935理工英语2题目
  5. 【Elasticsearch】es 使用Rollup在Elasticsearch 6.3中合并旧日志 上卷 Rollup
  6. MySQL:设置字段默认为当前时间
  7. gif分解合成_如何通过分解和合成使复杂的问题更容易
  8. go-项目配置govendor【详细教程】
  9. SVM-RFE使用及换kernal及estimator
  10. 怎样重启Gunicorn
  11. Bootstrap全部知识点总结
  12. Worthington核酸酶、微球菌相关研究及测定方案
  13. PL\SQL用户指南与参考10.1 转载
  14. 在.net里编写Windows Service
  15. JavaScript打字小游戏
  16. cognos报表制作学习(二)修改原报表
  17. v3 572g 51mr 拆机加SSD和内存
  18. JAVA面试(不同类型的公司特点)
  19. JAVA计算机毕业设计电子产品购物平台Mybatis+系统+数据库+调试部署
  20. undo数据文件丢失的恢复

热门文章

  1. ThinkPHP5.0版本和ThinkPHP3.2版本的差别
  2. JS CKEditor使用setData后绑定click事件
  3. ui-router 路由重定向
  4. .net 面试题 (1)
  5. 智能优化算法:蛇优化算法-附代码
  6. 利用Python中的GDAL和OGR模块实现shapefile对栅格DEM数据的裁剪
  7. 用Arcpy实现空间分析(建立缓冲区为例)
  8. Python 字典或JSON模拟数据库的增删改查
  9. 大学mysql期末试题_大学期末考试综合实训试题一
  10. 网易互娱基于 Flink 的支付环境全关联分析实践