热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于FPGA的32位CRC校验码生成器设计与实现

本文介绍了基于FPGA的32位CRC校验码生成器的设计与实现。该生成器利用FPGA的并行处理能力,实现了高效的数据校验功能。通过优化的算法和逻辑结构,该生成器能够快速准确地生成32位CRC校验码,适用于高速数据传输和存储系统的数据完整性验证。实验结果表明,该生成器具有良好的性能和可靠性,能够满足实际应用中的需求。
e7aee9ec237af20fbe34ea8519c88452.gif大侠好,欢迎来到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的多项式表示。二进制数表示为生成多项式的系数,如下:      6d57a559e2c433fd8a92cea166a15eab.png所有二进制数均被表示为一个多项式,x仅是码元位置的标记,因此我们并不关心x的取值,称之为码多项式。(我没研究过CRC代数推理过程,没体会到用多项式计算的方便之处,这里要学会的就是给出生成多项式g(x),能写出对应的二进制即可)常见的生成多项式如下:cba55ee47a0bb71b51984d32aae53e67.png五、关于模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,列竖式计算:   2b201bf4f497b95b2fe2b8c10780f19a.png4)除法运算:
       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,列竖式计算:989d0d28ef4e54ec514a8450ae77dbc0.png掌握了上面的运算规则,你可以尝试计算一个复杂一点的,如下:       9fae621473f85809cbc6a5e2a8d6cf66.png如果得到的余数结果正确,你掌握的东西就够用了。六、CRC-CCITT的硬件实现CRC-CCITT的生成多项式为:   2f526ebd25e6a7a1335af4a733743962.png对应的二进制数就是上面复杂运算中那个除数。由刚才的计算可知,对于8 bit的数据 0xaa,它的CRC校验码为0001 0100 1010 0000,下面用verilog来实现,看能否得到这个结果:要实现这一过程,仍然需要LFSR电路,参看《FPGA设计中,产生LFSR伪随机数》中关于该电路特性的介绍,如果你不需要了解原理,直接略过即可;有所改进的地方就是,可以将伪随机数发生器看作一个Moore型状态机,它的输出只与当前的状态有关;而此时利用LFSR电路,需要引入数据输入端,输出不仅取决于当前的状态,还取决于输入信号,相当于Mealy型状态机,如下图:  7a52065aedc378340ba8d37fcf85f5c0.png注意对比与伪随机数产生器中该反馈支路的区别。反馈项gr+1gr……g0为生成多项式的系数,依然是1代表存在反馈,0代表不存在反馈;此电路可以完成上述的模2除法操作,若我们要求0xaa的CRC校验码,则从高位到低位顺序输入0xaa共8 bit后,D15……D0中的数据即为所要求的余数,即CRC校验位。七、verilog描述如果用时序电路串行实现,则8 bit数据要移位8次,就需要8个clk,效率低下,为了能在一个时钟周期输出结果,必须采用组合电路,当然,这是以空间换时间的方法,由于使用了for循环8次,直观的讲电路规模将扩大8倍。2d0032eaf6237c53d12bfa5495acfa8d.pngb4c5cc100cb8d5cc79e9e9bc4db786b4.png仿真结果如下:得到的是数据0xaa和0xf0的CRC校验码,为验证结果的正确性,可以按照模2法则手工计算一下。016f02114043e37aa9d8a32c4be339c8.png八、其他例子同样给出一个4 bit信息位,5 bitCRC码的(9,4)码的程序和仿真结果,程序的流程与上述流程完全一样:       75af09895a87994d5d7a61c124f027b7.png270e96eb1565c215da9bae83cd9661f3.png6c28569dbbcc93ff1dee13571a015bd8.png说明:细心的大侠可能发现,本篇对LFSR电路能完成模2求余操作的原因避而不谈,不是因为不告诉你,是因为目前也不是很清楚,工科背景对数学推理实在是有点不知所云,尤其是看到国内教材那好几页的公式的时候,如果您有通俗易懂的讲解LFSR电路由来与应用的文章,注意是深入浅出的,请大力推荐,在此感谢。END后续会持续更新,带来Vivado、 ISE、Quartus II 、Candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

往期推荐

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

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

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

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

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

25d308628b6b37eb0b4439b660137fb6.gif

af149a4ed217f179a8b141848e5c764f.png

FPGA技术江湖广发江湖帖

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

FPGA技术江湖微信交流群

277c4eacf65d88cce406764f34ac8421.png

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

FPGA技术江湖QQ交流群

38794fdb260db4cdea72c93559c81c5b.png

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

2e51d4219e8ff322b80bc1b23dc3421f.png



推荐阅读
  • 图像相似度分析软件及常用算法综述
    有没有一款软件能比对两张照片是否一样? 可以用AI软件来对比。AI人脸比对已经变成非常常用的AI场景之一。步骤如下:1、浏览器输入网址百度AI应用,AI ... [详细]
  • 基于STM32的智能太阳能路灯设计与华为云IOT集成方案
    基于STM32的智能太阳能路灯设计与华为云IOT集成方案 ... [详细]
  • 在Java中,一个类可以实现多个接口,但是否能够继承多个类则存在限制。本文探讨了Java中实现多继承的方法及其局限性,详细分析了通过接口、抽象类和组合等技术手段来模拟多继承的策略,并讨论了这些方法的优势和潜在问题。 ... [详细]
  • [Offer收割]编程竞赛第8轮 A 小Ho的完美主义倾向
    题目链接:小Ho的完美主义倾向题目描述:小Ho在一条直线型的街道上漫步。这条街道由若干块长度为L的石板铺设而成,因此每隔L的距离就会出现一道石板间的接缝。小Ho对这些规律排列的接缝产生了浓厚的兴趣,他决定研究如何在这条街道上行走,以满足自己对完美路径的追求。本题要求在给定的约束条件下,计算出小Ho能够实现其目标的所有可能方案数。 ... [详细]
  • 如何在服务器上正确连接显示器与键盘?一台主机是否能够支持双显示器及键盘配置?通常情况下,一台主机确实可以连接两个显示器和键盘,但需要使用适当的连接设备,如KVM切换器或分屏器。只要主机的硬件配置足够,这种多显示器配置是完全可行的。理论上,通过合适的设备,最多可以实现一拖五的配置。具体的技术参数和连接方法将在下文中详细说明。 ... [详细]
  • 在上篇文章的基础上,本文将继续探讨 Linux 设备驱动中的设备模型与 `devicedriverbus` 机制。在将设备注册到总线之前,需要先创建 `device` 对象。可以通过静态定义 `device` 结构体变量,并调用 `device_register` 函数来完成这一过程。此外,文章还将详细解析设备模型的内部工作机制,以及 `devicedriverbus` 机制如何实现设备与驱动的自动匹配和管理。 ... [详细]
  • WinForms应用程序中的高效双缓冲技术优化方法
    在探讨WinForms应用程序中高效的双缓冲技术优化方法时,网络上的资料往往杂乱无章,缺乏清晰的解释。本文总结了多种优化方案,包括但不限于:第一种方案,通过设置控件的DoubleBuffered属性来减少屏幕闪烁;第二种方案,自定义绘图方法以提高性能;第三种方案,利用重载WndProc方法拦截绘制消息。此外,还结合实际代码示例,详细解析了每种方案的实现原理和应用场景,帮助开发者更好地理解和应用双缓冲技术。 ... [详细]
  • 决策树在鸢尾花数据集上对不同特征组合的分类效果分析及模型性能比较
    本文探讨了决策树算法在鸢尾花数据集上的应用,分析了不同特征组合对分类效果的影响,并对模型性能进行了详细比较。决策树作为一种层次化的分类方法,通过递归地划分特征空间,形成树状结构,每个节点代表一个特征判断,最终达到分类目的。研究结果表明,不同特征组合对模型性能有显著影响,为实际应用提供了重要参考。 ... [详细]
  • PAT甲级 1068 寻找更多硬币 (30分) 01背包问题与路径优化
    PAT甲级 1068 寻找更多硬币 (30分) 01背包问题与路径优化 ... [详细]
  • 本文将深入探讨Python的Tulip网络库(即3.4版本后更名为asyncio)的实现机制。通过详细解析Tulip的工作原理,旨在帮助读者理解其如何高效处理I/O阻塞问题,并展示其实现非阻塞流程的具体方法。 ... [详细]
  • 听说香港中文大学有一个教授开发了一个“投注方程式”来赌马,三个赛季就赚了5000万港币。现在请你来开发一个简单的赌马程序:假设开赛若干分钟之内都可以下注 ... [详细]
  • Panabit应用层流量管理解决方案
    Panabit是一款国内领先的应用层流量管理解决方案,提供高度开放且免费的专业服务,尤其擅长P2P应用的精准识别与高效控制。截至2009年3月25日,该系统已实现对多种网络应用的全面支持,有效提升了网络资源的利用效率和安全性。 ... [详细]
  • 全面解析:Python数据分析精华资源汇总(附带企业级实践案例)
    最近几年,数据分析可真是太火了。阿里、字节等互联网巨头基于大数据打造的商业模式获得巨大成功,使得“数据思维”、“数据能力”迅速成为衡量职场人能力的核心指 ... [详细]
  • 数据压缩与编解码技术优化
    编码的种类  编码(Encoding)在认知上是解释传入的刺激的一种基本知觉的过程。技术上来说,这是一个复杂的、多阶段的转换过程,从较为客观的感觉输入& ... [详细]
  • 深入解析人工神经网络中的神经元模型
    目前,深度学习(DeepLearning,简称DL)在算法领域可谓是大红大紫,现在不只是互联网、人工智能,生活中的各大领域都能反映出深度学习引领的巨大变革。要学习深度学习,那么首先 ... [详细]
author-avatar
百脑汇惠州店_956
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有