【科普】CRC校验(一)什么是CRC校验?

2023-11-17

目录

 

CRC(循环冗余校验)

CRC 校验码的生成

CRC 的发送方与接收方

发送方

接收方

除法异或运算示意图


 

CRC(循环冗余校验)

CRC(Cyclic Redundancy Check)循环冗余检验,是一种用于检测数字数据错误的技术。作为一种校验和类型,CRC 根据文件或更大数据集的构建生成固定长度的数据集。就其用途而言,CRC是一种哈希函数,用于检测数字电信网络和硬盘驱动器等存储设备中常用的原始计算机数据的意外更改。

在循环冗余校验中,固定数量的校验位被附加到需要传输的消息中。数据接收器接收数据,并检查检查位是否有任何错误。在数学上,数据接收器通过查找所传输内容的多项式除法的其余部分来评估附加的检查值。如果似乎发生了错误,则会发送否定确认,要求重新传输数据。

循环冗余检查也适用于硬盘等存储设备。在这种情况下,检查位将分配给硬盘中的每个块。当计算机读取损坏或不完整的文件时,将触发循环冗余错误。CRC 可以来自其他存储设备或 CD/DVD。错误的常见原因包括系统崩溃,文件不完整或损坏,或者有很多错误的文件。

CRC多项式设计取决于应该受到保护的块的长度。错误保护功能也可以决定CRC设计。可用于CRC实施的资源可能会对性能产生影响。理解CRC的另一种方法是查看其名称中的特定单词。专家指出,CRC被称为“冗余”,因为它增加了数据集的大小而没有添加新信息,而“周期性”则因为它适用于周期性实施系统。

如前所述,指出CRC是一种特定类型的校验和也是有帮助的,其中任意大小的数据集映射到固定大小的字符串,可以将其称为哈希函数。相比之下,校验和本身可能非常简单 , 例如,基元校验和可以只是相关字节值的总和。使用其周期性设置的CRC通常被认为是检查错误和验证数据完整性的一个非常好的策略。它是校验和使用和散列以及一般文件检查中不断发展的工具包的一部分。

CRC 校验码的生成

CRC校验码的生成主要包含以下过程:

  1. 找到除数的长度,这个除数是我们自己定义的。
  2. 除数的位数减一为CRC校验码的位数,假设除数的位数为5,则校验码的位数为4,对被除数也就是需要传递的信息的数后面加上校验码的位数的0,如果校验码的位数为4,则在被除数后面直接加上4个0
  3. 执行除法操作,将加上4个0的被除数作为新的被除数,除以我们定义的除数,除法操作完成后,会得到两个结果:一个是商,另一个是余数。(注意:除法运算采用异或运算)
  4. 得到的余数即使我们要的 CRC 校验码

CRC 的发送方与接收方

发送方

发送方给出需要传递的数据(Data),并定义多项式(polynomial),以多项式得到(n+1)位除数(divisor),对数据的末尾补上n位0,作为被除数,用除数去除被除数,得到的余数就是所需要计算的n位CRC校验码,将得到的CRC校验码拼接到原始数据的末端生成新的数据,将这个数据一并传给接收方。

接收方

接收方需要做的事就更简单一些,将得到的一整块数据作为被除数,用在发送方得到的除数去除被除数,如果结果余数为0的话,代表数据的传输没有出错,得到的数据事正确且有效的。

接收方还有另外一种方法,即使发送方分别发送数据和CRC数据,结束方得到数据末尾补n个0作为被除数,用多项式除数去除被除数,得到的余数如果作为接收方的CRC校验码,如何接收方得到的CRC数据和发送方发的CRC一致的话,同样也可以证明数据的传输是没有问题的。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

除法异或运算示意图

可以看到图中,我们所要传递的信息为100100,也就是被除数,我们自定义的除数为1101,它的位数为4,因此要在被除数后面加上3个0,然后进行除法异或运算,最终得到的商为111101,得到的余数为001,根据前面的定义,这个余数001就是我们想要的 CRC 校验码。

然后将生成的 CRC 校验码添加到原被除数的后面,也即是100100后面补上001得100100001,这就是我们要发送的新的数据信息包含了 CRC 校验码,接收端就可以进行相应的解析。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

 更具体的CRC校验码的计算方法可以参考一位B站up主的教学视频

[CRC校验]手算与直观演示

将自定义的多项式以电路的形式展现,原始数据加上相应位数的0,依次进入到电路当中,最终生成的就是我们所需的CRC校验码。更详细的计算方法可以在视频中学习。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【科普】CRC校验(一)什么是CRC校验? 的相关文章

  • 何时使用tick(')进行Verilog数组初始化?

    数组初始化可以通过或不通过 int a 8 0 1 2 3 4 5 6 7 Packed int b 8 0 1 2 3 4 5 6 7 Unpacked 有没有correct方式 假设数组使用不可打包的类型 例如int string ET
  • 带有always_comb结构的Systemverilog问题

    我对这个 SystemVerilog 代码有疑问 这是代码 module mult multiplicand multiplier Product clk clear Startm endm input 31 0 multiplicand
  • Verilog 奇怪的仿真结果综合后

    我面临一个奇怪的问题 该代码适用于简单的 ALU 仅将感兴趣的代码粘贴到此处 always posedge clk or posedge rst begin if rst 1 begin mul valid shr 3 b000 end e
  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar
  • 「Verilog学习笔记」 Johnson Counter

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module JC counter input clk input rst n output reg 3 0
  • 使用forever和always语句

    以下两个代码都会生成一个时钟 我需要知道除了时钟生成之外 永远循环是否还有其他用途 我只在时钟一代中遇到过永远 如果只是为了这个目的 那岂不是毫无用处 initial begin clk 0 forever begin 5 clk clk
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • 如何使用 don't cares 参数化 case 语句?

    我有一条称为输入的电线 我想检测前导的数量 我正在尝试创建一个模块 该模块使用下面的 case 语句根据前导零的数量更改输出数据 然而 输入的大小是可参数化的 如果 X 是固定值 4 我将创建一个 case 语句 case input 4
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 在 Verilog 中判断总线是否包含单个 x 的最佳方法是什么?

    我有一个监控总线的测试台 总线内的一些信号 位 可以是 1 bx 由于多种原因 我需要知道总线内是否有任何信号是 1 bx 如果总线包含任何 x 测试 不用于综合 仅用于模拟目的 的最佳方法是什么 我曾希望我可以使用减少或然后使用 但这似乎
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 如何在 Verilog 中推断 Block RAM

    我在一个项目中遇到了一个非常具体的问题 这个问题已经困扰我好几天了 我有以下 RAM 模块的 Verilog 代码 module RAM param clk addr read write clear data in data out pa
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 具有内部赋值延迟的阻塞和非阻塞语句之间的区别

    以下 2 个 verilog 代码片段有什么区别 1 always in out 5 in AND 2 always in out lt 5 in 考虑到always块中不存在其他行 输出会有什么不同吗 问题参考幻灯片 16 参见 o5 和
  • Verilog 数组语法

    我是 Verilog 新手 并且遇到了很多麻烦 例如 我想要一个包含八个单元的数组 每个单元都是 8 位宽 以下不起作用 reg 7 0 transitionTable 0 7 assign transitionTable 0 10 仅仅做

随机推荐

  • IDEA常用快捷键集合(详解)

    keymap中定义的快捷键实在是太多了 全部记住几乎不可能 但在项目开发或调试的工程中 快捷键是绝对的效率工具 查询快捷键 CTRL N 查找类 CTRL SHIFT N 查找文件 CTRL SHIFT ALT N 查 找类中的方法或变量
  • msvcp140.dll缺失重新安装的方法【msvcp140.dll修复工具下载安装】

    如果您在使用某些应用程序或游戏时遇到了 msvcp140 dll丢失 的错误提示 那么您需要采取一些措施来解决这个问题 以下是几种解决msvcp140 dll丢失的方法 msvcp140 dll解决方法一 1 在浏览器顶部网页搜索 dll修
  • 【vue】实现首屏加载等待动画 避免首次加载白屏尴尬

    原文链接 在线体验 width 100 height 443 src jsfiddle net kajweb qrno8s0g 9 embedded html css result allowfullscreen allowfullscre
  • a foreign key constraint fails

    可能由两种原因导致 1 设置的外键和对应的另一个表的主键值不匹配 解决方法 找出不匹配的值修改 或者清空两表数据 2 字符集和排序规则的差异引起 如果确认外键和主键一致 使用如下方式解决 代码前段插入 SET OLD CHARACTER S
  • iOS 15 越狱情报

    关注后回复 进群 拉你进程序员交流群 作者丨小集 来源丨小集 ID zsxjtip iOS 15 正式版本已经发布了 而 iOS 15 1 beta 版本也在近期发布 在普通用户和开发者追更各个 beta 版和正式版时 另一个神秘群体也没有
  • 架构 但服务多租户_华为以AI和混合云实现多租户数据中心架构转型

    华为采用全球直播的方式以 你好 智能世界 为主题举办行业数字化转型大会 把原计划在巴塞罗那现场举办的活动时间不变 2月24日 27日 搬到线上 针对互联网服务行业数字化 专门举办的MTDC 多租户数据中心论坛 于北京时间27日开启全球线上直
  • 外包干了2个月,技术退步明显...

    先说一下自己的情况 大专生 18年通过校招进入湖南某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 调用halcon函数时的错误处理

    注 以下材料来自halcon帮助文档 因水平有限 难免有误 欢迎指正 0 概述 在遇到一个运行时错误时 HALCON C 会以默认的方式给出错误信息 并终止程序 然而 在某些情况下 我们并不希望按照这样的规则来处理错误 例如 当一个程序允许
  • centos7.8从卸载python2,安装python3

    因为目前所有环境都是python2 7 5 但是项目上使用的是python3 7 5 迫切需要使用python3 7 5验证 安装遇到困难 记录一下 首先卸载python2 如果不想卸载python2的可以跳过 这里卸载python2和其依
  • 信息图:iOS 7开发者需要知道的事

    如果你想为iOS 设备开发app 你需要知道如何与软件交互 如何设计 你还要知道苹果独特的开发理念和开发工具 真正的能力还需要成功地从其他行业领域借鉴核心概念 最后把所有这些东西糅合进你的信息库中 所以我们画了一张iOS 7开发者应该的知识
  • iOS开发:使用大图+脚本,生成各种size的app icon和图片素材

    美术UI在公司是宝贵的资源 集各种项目宠爱于一身 为了努力完成好老板的进度需求 不给UI添麻烦 程序员开始忙活了 在iOS里面 我们使用image assert来管理素材和app icon 为什么呢 因为方便 按照image assert要
  • 怎样在前端遍历后端服务器传递来的json字符串中的集合?

    怎样在前端遍历后端服务器传递来的json字符串中的集合 后端把一个List类型的集合先转换成json字符串然后返回给通过ajax返回给前端 如下图 后端服务器中的代码如下图 紧着着前端页面遍历 后端传递来的json字符串中的集合数据 先来看
  • 读论文(二) - BERT

    Introduction 预训练的语言模型 在改进自然语言处理任务方面非常有效 包括句子级别的任务 自然语言推理和释义 也包括分词级别的任务 NER和问答 将预训练的语言表示应用于下游任务有两种现有策略 基于特征 feature based
  • 循环神经网络(RNN)的基本原理及LSTM的基本结构

    来源于课上实验 结果清晰 遂上传于此 实验环境TensorFlow1 14 该课件仅用于教学 请勿用于其他用途 详细参考 实验笔记 实验视频 一 实验目的 学习掌握循环神经网络 RNN 的基本原理及LSTM的基本结构 掌握利用LSTM神经元
  • vulfocus靶场安装教程

    背景 漏洞把场是目前每个安全人员以及想学习信息安全的人必备的东西 但目前商业化产品居多 还有一些类似dwwa sqlilabs这类的开源项目 但是漏洞环境比较固定 使用完一次后就失去其作用 搭建的成本过高 每次启动的流程会比较繁锁 甚至很多
  • 【react】对state的理解

    state是类创建的实例对象上的一个状态属性 想要改变类的实例对象的值 就要用到构造器 但由于类组件都是继承的React内置的Component类 继承的类 要写构造器的话 就必须写super 改变state this state xxx
  • TIP Spring-boot健康检查查看详细信息

    Spring boot提供了健康检查的手段 定期检查应用各个组件的状态 并提供了一些通用组件的检查 比如MySQL Redis等 可以使用下面的命令查看应用的健康状态 curl localhost port health 如果应用有异常 会
  • GhostNetV2学习笔记

    GhostNetV2学习笔记 GhostNetV2 Enhance Cheap Operation with Long Range Attention Abstract 轻量级卷积神经网络 CNNs 是专为在移动设备上具有较快推理速度的应用
  • Deployment Controller 典型使用场景

    1 重新调度 Rescheduling 不管想运行 1 个副本还是 1000 个副本 副本控制器都能确保指定数量的副本存在于集群中 即使发生节点故障或 Pod 副本被终止运行等意外状况 2 弹性伸缩 Scaling 手动或者通过自动扩容代理
  • 【科普】CRC校验(一)什么是CRC校验?

    目录 CRC 循环冗余校验 CRC 校验码的生成 CRC 的发送方与接收方 发送方 接收方 除法异或运算示意图 CRC 循环冗余校验 CRC Cyclic Redundancy Check 循环冗余检验 是一种用于检测数字数据错误的技术 作