『一文讲透』CRC校验原理和推导过程及Verilog实现

路科验证 2024-06-11 12:00

一、CRC简介


循环冗余校验和(Cyclic Redundancy Checksum, CRC)是一种检错技术。


数据通信领域中最常用的一种差错校验码,其信息字段和校验字段长度可以任意指定,但要求通信双方定义的CRC标准一致。主要用来检测或校验数据传输或者保存后可能出现的错误。


在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。


为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。


CRC检错能力强,开销小,易于用编码器及检测电路实现,从性能和开销上考虑均优奇偶校验和累加校验。在数据存储和数据通讯领域,多用CRC校验,不能发现的错误在0.005%以下。著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,WinRAR、NERO、ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。


另外,CRC校验多数都是用于检错而不是纠错


1.1 CRC可检测的错误


 •  可检测出所有奇数个错误;

 • 可检测出突发长度

 •  大部分突发长度=n-k+1的错误可以检测出,其中不可检出的错误占2-(n-k-1);

 •  大部分突发长度>n-k+1的错误可以检测出,其中不可检出的错误占2-(n-k)。


其中,n为信息码+监督码总长度,k为信息码长度。

突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。


1.2 CRC需要知道的基本名称

这里需要知道几个组成部分或者说计算概念:多项式公式、多项式简记式、数据宽度、初始值、结果异或值、输入值反转、输出值反转、参数模型。


1.2.1 多项式公式

对于CRC标准除数,一般使用多项式(或二项式)公式表示,如下图中除数11011(poly值为0x1b)的二项式为G(X)=X4+X3+X+1,X的指数就代表了该bit位上的数据为1(最低位为0)


这里特别注意一下位数问题,除数的位数为二项式最高次幂+1(4+1=5),这个很重要


1.2.2 多项式简记式

通过对CRC的基本了解我们知道,多项式的首尾必定为1,而这个1的位置在下一步计算一定为0,所以就把前面这个1给省略掉了,出现了一个叫简记式的东西,如上例中除数11011的简记式为1011,很多看过CRC高级语言源码的人会知道,对于CRC_16标准下G(X)=X16+X15+X2+1(16#18005)的poly值实际上是8005,这里使用的就是简记式,以后见到的基本都是简记式


1.2.3 数据宽度

数据宽度指的就是CRC校验码的长度(二进制位数),知道了CRC的运算概念和多项式,就可以理解这个概念了,CRC长度始终要比除数位数少1,与简记式长度是一致的。


1.2.4 初始值与结果异或值

在一些标准中,规定了初始值,则数据在进行上述二项式运算之前,需要先将要计算的数据与初始值的最低字节进行异或,然后再与多项式进行计算。


而在结果异或值不为零的情况下,则需要将计算得到的CRC结果值再与结果异或值进行一次异或计算,得到的最终值才是我们需要的CRC校验码。


这里可以看出,初始值与结果值的位数要求与数据宽度一致。


1.2.5 输入值反转与输出值反转

输入值反转的意思是在计算之前先将输入数据反转,然后再计算。如对于输入数据,其正向值为1 1000 0000 0000 0101,反转值则为1010 0000 0000 0001 1,注意这里反转并不是按位取反,而是低bit位与高bit位交换位置


输出值反转则是将最终得到的CRC结果反转。


通常,输入值反转后的结果值也会是反转的,所以这两个选项一般是同向的。


二、CRC校验原理


CRC校验根本思想就是先在要发送的数据帧后面附加一个数(这个就是用来校验的校验码),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它是数据帧除以选定的CRC除数产生的余数


新帧到达接收端后,有两种方法比较传输是否出错:

一是用同样的方法对数据帧除以CRC除数产生的余数跟校验码相比,如果相同,则数据正确,否则数据错误;

二是对新帧除以CRC除数,如果余数为0,则数据正确,否则数据错误。


要校验的数据加上此数据计算出来的crc校验码组成新的数据帧,如下图所示。


2.1 CRC校验计数基础知识

CRC校验中的运算不是普通的运算,称为“模2运算


模2加法和减法都是异或运算,例子如下:

1010+0110=1100,1010-0110=1100


模2乘法的定义:

0×0=0,0×1=0,1×0=0,1×1=1。1011×101=100111

其中横线之间的累加过程,采用的是2进制加法,不进位。

模2除法,其实也是异或运算:
0/1=0,1/1=1。1011/101=10,余数为100(补了2个0)。

2.2 CRC多项式的选择(除数的选择)


对于CRC标准除数,一般使用多项式(或二项式)公式表示(参照节1.2.1和1.2.2),CRC除数位数越高,检错能力越强,通常是根据设计中的数据流大小与格式来选择。数据流是8bit为一个包的话,则CRC校验位数选择8bit或者16bit等比较好。


三、CRC校验码手动计算


CRC校验码就是两个数相除的余数,而且余数位数要正好比除数少一位,即使MSB为0。


下面举例说明CRC校验码手动计算过程:

对于数据1110 0101,指定多项式为x4+x3+x+1则除数为11011。首先要将数据左移4bit(校验码的位数),然后再进行计算:


将上面计算得到的校验位补到数据的后面就构成了要发送的新数据帧:


四、CRC校验算法推导与Verilog实现


第三大节讲了如何手动计算CRC校验码,但如何在编程中实现,这就是个难题,网上很多文章都只是浅浅地谈了一下,并没有具体推导,如果对推导过程没兴趣的,可以直接翻到第五大节直接用链接生成Verilog代码。


4.1 生成矩阵G

CRC是循环码的一种,这是通信原理上的内容。由生成矩阵G,就可以由k个信息位得到整个码组,即要传输的完整数据(信息码+监督码):

其中,g(x)是唯一的(n-k)次生成多项式,xk与g(x)相乘是使其左移k位。G(x)为生成矩阵,与4.2中G(x)意义不同(我懒得改了)。整个码组A(x)为



其中,A为输入数据矩阵。以CRC4举例,多项式为x4+x+1(10011),输入数据为5bit举例

输入数据矩阵A,就可以得到相应的数据码,计算结果中前5bit为信息码,后4bit为监督码


4.2 CRC校验公式

CRC校验码其实是两个多项式相除的余数,我们要传输的数据(也是被除数)是多项式M(x) 的系数,除数是生成多项式G(x) 的系数,G(x) 的最高次幂为xn-k ,校验码是余数多项式R(x) 的系数,Q(x) 为商,则计算公式为

4.3 CRC串行计算公式推导

上面的式子其实已经可以计算得到CRC校验码了,但还无法在硬件上实现,所以需要用硬件的思想推导可实现的计算方法,这里以CRC-32的标准来进行举例推导。

根据二进制信息码转换成多项式的方法,对于任意一个长度为(m+1)的二进制信息码,可以转换成一个最高次幂为m的多项式:


其中,2m 是二进制的科学计数法。
为求此二进制序列的CRC值,首先将M(x) 乘以232,然后再除以生成多项式G(x),所得余数R(x) 是一个最高次幂为31的多项式,其系数为CRC-32的值,那么:


先从最高位开始解,

结合公式一、公式二与公式三可得:


接着解次高位,在公式四中,最高位的余数与M(x)次高位的和除以G(x),可得到次高位的商和余数:

将公式五代入公式四中:

以次类推可得最终公式:


以上推导过程的前提是串行计算,即先计算多项式M(x)最高位以G(x),得到最高位的商和余数;最高位的余数与M(x)次高位求和除以G(x)得到次高位的商和余数……如此反复计算直到运算完最低位得到的余数R0(x)对应的系数即为我们的CRC-32的校验码。

以上推导过程表明:一个m+1位的二进制序列,可以按位求取CRC-32的值。运算时,首先从最高位(第m+1位,设最右边的为第1位)开始计算,然后依次计算较低位。因此,每一位的CRC-32运算就转化成了一个最高次幂为32的多项式除以一个最高次幂为32的多项式(生成多项式),结果(余数)为一个最高次幂不超过31的多项式。


4.4 CRC校验串行计算的Verilog实现

4.1和4.2节讲了公式推导,这一节讲如何用Verilog表达出来。

首先得了解LFSR,线性反馈移位寄存器简称LFSR,用于产生可重复的伪随机序列,也可用来实现CRC校验。LFSR主要由触发器(寄存器)、异或门以及反馈线路组成。


通常推荐伽罗瓦LFSR,如图所示,对于二进制来说,gn 到g0的各个系数表示这条支路是否存在,1为存在,0则不存在。各个寄存器储存着上一次CRC校验运算的结果,寄存器的输出即为CRC的值,这里还是以CRC-32举例,其生成多项式为:

当输入新的位参与运算时,信息多项式为:

上一次CRC计算的结果为:

根据上一节推导出的公式,新的CRC-32值Rn(x) 为 {Rn+1(x)×2 + M(x)}/ G(x) 的余数。设


在计算Q(x)/G(x) 的结果时,根据模2运算法则,如果A31+ Mn 的结果为1,则商为1,余数为Q(x)-G(x) ;如果A31+ Mn 的结果为0,则商为0,余数为Q(x) 本身。其中,A31+ Mn 是模2加法;Q(x)-G(x) 是模2减法。


当上一个CRC-32结果的最高位A31和输入的数值Mn模2加法结果为1时,上一次CRC结果右移一位,完成乘2的过程,再与G(x)多项式的系数进行异或运算,完成减法。由于任何数与0异或保持不变,所以LFSR中只有在G(x)多项式为1的系数处才放置异或门。运算完毕以后把结果存入寄存器即为新的CRC-32值。


当上一个CRC-32结果的最高位A31和输入的数值Mn模2加法结果为0时,Q(x)不够除,Q(x)本身作为余数存入寄存器,获得新的CRC-32值。由于A31+ Mn的结果为0,异或门不起作用,Q(x) = A30×231+ A29×230+ … +A1×22+ A0×21,由Rn+1(x)右移一位获得, Q(x)的0次幂为0,刚好把A31+ Mn的结果作为输入。


4.5 CRC校验并行计算的Verilog实现

4.3节是串行的表述,每一bit数据需要一个时钟周期,为提高速率还得用上并行计算的思想,输入数据S要并行输入到G(x)系数为1的支路中,输入数据从输入端按高到低逐bit输入,就可以实现。

假如被除数是2位的数据S[1:0]=01,多项式是10011,x4 +x+1。在CRC校验里面,习惯省略最高位的1,多项式用0011表示。那么S除以0011的模二运算数字电路结构为:


其中d1~ d4是寄存器输入;q1~q4是寄存器输出。寄存器需要赋初值,一般赋全1或全0。

d1=S[1]^q4;


d2= S[1]^ q1^q4;


d3=q2;


d4=q3。


经过一次移位后:


q1=d1= S[1]^q4;


q2= d2= S[1]^ q1^q4;


q3= d3=q2;


q4= d4=q3。


此时有:


d1=S[0]^q3;


d2= S[0]^ S[1]^ q4^q3;


d3= S[1]^ q1^q4;


d4= q2。


令c[3:0]={q4,q3,q2,q1},d[3:0]={d4,d3,d2,d1},那么d就是最终的运算结果表达式,如下


d[3]=c[1];


d[2]= S[1]^ c[0]^c[3];


d[1]= S[0]^ S[1]^ c[3]^ c[2];


d[0]= S[0]^ c[2]。


令c的初值为0,则01对0011的模二除法的余数为0011。

再比如多项式为x5 +x3 +x+1,简记式为01011,其数字电路结构为:

输入数据S要全部输入完,寄存器得到的结果才是最后的结果。同理可推导出其他多项式和输入数据的情况。


4.6 CRC校验在多个字节(数据包)场景下的计算方法

对于多个字节(数据包),这里举个例子,如果数据是10bit*100个包,则每次输入10bit得到校验码后,该检验码为下次数据计算时寄存器D的初值,如此反复计算得到最后的检验码添加到整个数据后面即可,而不需要每个数据包后面都添加检验码。


文章来源:https://blog.csdn.net/qq_42446721/article/details/127054205

版权归原作者所有


路科验证 专注于数字芯片验证的系统思想和前沿工程领域。路桑是Intel资深验证专家,主持验证架构规划和方法学研究,担任过亿门级通信芯片的验证经理角色。在工程领域之外,他在西安电子科技大学和西安交通大学客座讲授芯片验证课程。著有书籍《芯片验证漫游指南》。
评论 (0)
  •   舰艇电磁兼容分析与整改系统平台解析   北京华盛恒辉舰艇电磁兼容分析与整改系统平台是保障海军装备作战效能的关键技术,旨在确保舰艇电子设备在复杂电磁环境中协同运行。本文从架构、技术、流程、价值及趋势五个维度展开解析。   应用案例   目前,已有多个舰艇电磁兼容分析与整改系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润舰艇电磁兼容分析与整改系统。这些成功案例为舰艇电磁兼容分析与整改系统的推广和应用提供了有力支持。   一、系统架构:模块化智能体系   电磁环境建模:基
    华盛恒辉l58ll334744 2025-05-14 11:22 59浏览
  •   军事仿真推演系统平台核心解析   北京华盛恒辉军事仿真推演系统平台以计算机仿真技术为基石,在功能、架构、应用及效能上展现显著优势,成为提升军事作战与决策能力的核心工具。   应用案例   目前,已有多个仿真推演系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润仿真推演系统。这些成功案例为仿真推演系统的推广和应用提供了有力支持。   一、全流程功能体系   精准推演控制:覆盖推演启动至结束全流程。   智能想定管理:集成作战信息配置、兵力部署功能。   数据模型整合
    华盛恒辉l58ll334744 2025-05-14 17:11 24浏览
  •   电磁数据展示系统平台解析   北京华盛恒辉电磁数据展示系统平台是实现电磁数据高效展示、分析与管理的综合性软件体系,以下从核心功能、技术特性、应用场景及发展趋势展开解读:   应用案例   目前,已有多个电磁数据展示系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据展示系统。这些成功案例为电磁数据展示系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与预处理   智能分析处理   集成频谱分析、时频变换等信号处理算法,自动提取时域频域特征;
    华盛恒辉l58ll334744 2025-05-13 10:20 368浏览
  •   电磁数据管理系统深度解析   北京华盛恒辉电磁数据管理系统作为专业的数据处理平台,旨在提升电磁数据的处理效率、安全性与可靠性。以下从功能架构、核心特性、应用场景及技术实现展开分析:   应用案例   目前,已有多个电磁数据管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁数据管理系统。这些成功案例为电磁数据管理系统的推广和应用提供了有力支持。   一、核心功能模块   数据采集与接入:实时接收天线、频谱仪等设备数据,兼容多协议接口,确保数据采集的全面性与实时性
    华盛恒辉l58ll334744 2025-05-13 10:59 274浏览
  • 在全球供应链紧张和国产替代需求推动下,国产存储芯片产业快速发展,形成设计到封测一体化的完整生态。北京君正、兆易创新、紫光国芯、东芯股份、普冉股份和佰维存储等六大上市公司在NOR/NAND Flash、DRAM、嵌入式存储等领域布局各具特色,推动国产替代提速。贞光科技代理的品牌紫光国芯,专注DRAM技术,覆盖嵌入式存储与模组解决方案,为多领域客户提供高可靠性产品。随着AI、5G等新兴应用兴起,国产存储厂商有望迎来新一轮增长。存储芯片分类与应用易失性与非易失性存储芯片易失性存储芯片(Volatile
    贞光科技 2025-05-12 16:05 210浏览
  • 感谢面包板论坛组织的本次测评活动,本次测评的对象是STM32WL Nucleo-64板 (NUCLEO-WL55JC) ,该测试板专为LoRa™应用原型构建,基于STM32WL系列sub-GHz无线微控制器。其性能、功耗及特性组合经过精心挑选,支持通过Arduino® Uno V3连接,并利用ST morpho接头扩展STM32WL Nucleo功能,便于访问多种专用屏蔽。STM32WL Nucleo-64板集成STLINK-V3E调试器与编程器,无需额外探测器。该板配备全面的STM
    无言的朝圣 2025-05-13 09:47 158浏览
  •   军事领域仿真推演系统的战略价值与发展前瞻   北京华盛恒辉仿真推演系统通过技术创新与应用拓展,已成为作战效能提升的核心支撑。以下从战略应用与未来趋势展开解析:   应用案例   目前,已有多个仿真推演系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润仿真推演系统。这些成功案例为仿真推演系统的推广和应用提供了有力支持。   一、核心战略应用   1. 作战理论创新引擎   依托低成本仿真平台,军事人员可高效验证新型作战概念。   2. 装备全周期优化   覆盖武器
    华盛恒辉l58ll334744 2025-05-14 16:41 34浏览
  •   定制软件开发公司推荐清单   在企业数字化转型加速的2025年,定制软件开发需求愈发多元复杂。不同行业、技术偏好与服务模式的企业,对开发公司的要求大相径庭。以下从技术赛道、服务模式及行业场景出发,为您提供适配的定制软件开发公司推荐及选择建议。   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转
    华盛恒辉l58ll334744 2025-05-12 15:55 334浏览
  • 文/Leon编辑/cc孙聪颖‍2025年1月至今,AI领域最出圈的除了DeepSeek,就是号称首个“通用AI Agent”(智能体)的Manus了,其邀请码一度被炒到8万元。很快,通用Agent就成为互联网大厂、AI独角兽们的新方向,迅速地“卷”了起来。国外市场,Open AI、Claude、微软等迅速推出Agent产品或构建平台,国内企业也在4月迅速跟进。4月,字节跳动、阿里巴巴、百度纷纷入局通用Agent市场,主打复杂的多任务、工作流功能,并对个人用户免费。腾讯则迅速更新腾讯元器的API接
    华尔街科技眼 2025-05-12 22:29 148浏览
  • 在当下竞争激烈的 AI 赛道,企业高层的变动往往牵一发而动全身,零一万物近来就深陷这样的动荡漩涡。近日,零一万物联合创始人、技术副总裁戴宗宏离职创业的消息不胫而走。这位在大模型基础设施领域造诣颇深的专家,此前在华为云、阿里达摩院积累了深厚经验,在零一万物时更是带领团队短期内完成了千卡 GPU 集群等关键设施搭建,其离去无疑是重大损失。而这并非个例,自 2024 年下半年以来,李先刚、黄文灏、潘欣、曹大鹏等一众联创和早期核心成员纷纷出走。
    用户1742991715177 2025-05-13 21:24 112浏览
  •   基于 2025 年行业权威性与时效性,以下梳理国内知名软件定制开发企业,涵盖综合型、垂直领域及特色技术服务商:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   五木恒润科技有限公司:是一家专业的部队信
    华盛恒辉l58ll334744 2025-05-12 16:13 258浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦