CRC校验码详解+Verilog实现(含代码)

这篇具有很好参考价值的文章主要介绍了CRC校验码详解+Verilog实现(含代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

CRC码简介

CRC校验码生成步骤

 CRC码生成多项式

 CRC校验码Verilog实现


CRC即循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定

CRC码简介

CRC校验码详解+Verilog实现(含代码)

CRC码是由2部分组成的,前部分是信息码,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的 r=n-k bit即为校验位

比如(7,3)码:110 0111 前三位110为信息码,后四位0111为校验码

设待传送的k位信息码()则对应的多项式为:

CRC校验码详解+Verilog实现(含代码)

 其中,=0或1,x的幂次对应于各码元的位置。

CRC校验码详解+Verilog实现(含代码) 表示 1001 0110

CRC校验码生成步骤

(1)将M(x)左移r=n-k位,即M(x)乘以得到

(2)将除以生成多项式g(x),得余式r(x)。r(x)为CRC校验码多项式,对应r位校验码元

(3)生成码字:CRC校验码详解+Verilog实现(含代码)

下面是一个例子: 

CRC校验码详解+Verilog实现(含代码)CRC校验码详解+Verilog实现(含代码)

 这块的模2除法是按位异或:如果除完之后余数为1 ,则除数上1 ,把被除数按位异或,结果为余数

 CRC码生成多项式

国际上通行的生成多项式:

CRC校验码详解+Verilog实现(含代码)

 一般g(x)位数越高,检测能力越强

 CRC校验码Verilog实现

假设信息码8位,生成码CRC-CCITT CRC校验码详解+Verilog实现(含代码)

按照CRC校验码生成步骤操作即可,代码如下: 文章来源地址https://www.toymoban.com/news/detail-400525.html

module CRC(
input clk       ,
input rst       ,
input [7:0] data,//信息码8位
output reg [15:0] crc//crc校验码
    );
    
    wire [15:0] crc_temp;//crc校验结果寄存器
    
    reg [23:0] temp    ;//移位数据用于除法运算
    
    parameter gx=17'b1_0001_0000_0010_0001;//生成多项式
    
    
    
    always@(posedge clk)begin
    	if(rst)begin
    		crc<=16'd0;  		
    		temp<={data[8:0],16'b0};
    	end
    	else begin//(模2除法求余数)  
    		if(temp[23]==1'd1)begin //高位为1 进行异或
    				temp[23:7]<=temp[23:7]^gx;//从高到低依次取17位(和gx同位宽)进行异或
    		end
    		else if(temp[22]==1'd1)begin
    				temp[22:6]<=temp[22:6]^gx;
    		end
    		else if(temp[21]==1'd1)begin
    				temp[21:5]<=temp[21:5]^gx;
    		end
    		else if(temp[20]==1'd1)begin
    				temp[20:4]<=temp[20:4]^gx;
    		end
    		else if(temp[19]==1'd1)begin
    				temp[19:3]<=temp[19:3]^gx;
    		end
    		else if(temp[18]==1'd1)begin
    				temp[18:2]<=temp[18:2]^gx;
    		end
    		else if(temp[17]==1'd1)begin
    				temp[17:1]<=temp[17:1]^gx;
    		end
    		else if(temp[16]==1'd1)begin
    				temp[16:0]<=temp[16:0]^gx;
    		end
    		else begin
    			crc<=temp[15:0];//取出余数
    		end
    	end
    end
    
    assign crc_temp={data[8:0],crc[15:0]};
    
endmodule

到了这里,关于CRC校验码详解+Verilog实现(含代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CRC循环冗余校验 (Cyclic Redundancy Check) 原理/电路实现/Verilog实现

    目录 1 什么是CRC循环冗余校验? 2 CRC校验的原理 2.1 多项式表示 2.2 模二 多项式除法 2.3 传输端  2.4 接收端 3 CRC码的产生 3.1 产生CRC码步骤 3.2 Verilog实现 4 电路实现原理—线性反馈移位寄存器 4.1 循环移位寄存器结构 4.2 最大长度移位寄存器  4.3 多项式除法电路(线性反馈移位

    2024年02月04日
    浏览(37)
  • C#: CRC8,CRC16,CRC32 校验代码

    说明:CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似

    2024年01月18日
    浏览(39)
  • CRC校验算法详解

            数据在传输过程(比如通过网线在两台计算机间传文件)中,由于传输信道的原因,可能会有误码现象(比如说发送数字5但接收方收到的却是6),方法发送额外的数据让接收方校验是否正确,这就是数据校验。常用的校验方法是和校验,就是将传送的数据(按字节

    2024年02月09日
    浏览(35)
  • 从原理到代码理解CRC循环冗余校验

    概述:本文详细介绍了CRC循环冗余计算的数学原理,算法中使用的参数说明,并以Modbus协议中的CRC-16算法为例,进行手算验证,同时提供LabVIEW和C语言的直接计算CRC-16 值的代码以及C的查表计算CRC-16代码和代码原理的说明。 初次接触CRC校验是因为项目需要上位机软件来记录P

    2024年02月04日
    浏览(41)
  • 十六、基于FPGA的CRC校验设计实现

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。 多项式一般指输入数据异或的对象;其

    2023年04月24日
    浏览(46)
  • CRC校验原理与FPGA实现(含推导过程)

      CRC校验全称为循环冗余校验(Cyclic Redundancy Check),常用于数据传输中的错误检测。   在学习CRC校验前,需要了解CRC校验中的几个基本概念: NAME:参数模型名称,比如CRC-8、CRC-16、CRC-32等 WIDTH:CRC校验位宽度 POLY:多项式的简写,用十六进制表示。例如:CRC-8的多项式

    2024年02月03日
    浏览(89)
  • CRC冗余校验的原理和FPGA实现思路

    CRC校验码,顾名思义是用于 校验 的。它可以用于检测数据传输过程中是否出现错误(某些位,或某几位,或者某块区域位错误),反正 可以知道数据出错了,但是不能纠错 。 CRC校验,本质上是模2除法求余。将发送信息 M 当做被除数,发送方和接收方共同约定一个除数 G

    2024年02月08日
    浏览(62)
  • CRC16/ModBus校验与C语言实现方法

    目录 一、什么是CRC16/Modbus校验 二、CRC16/Modbus校验的计算步骤 三、CRC16/Modbus校验的C语言实现         CRC16/Modbus校验在设备通信时可以验证数据帧的完整性,从而避免错误数据。其应用十分广泛,主要应用于Modbus通信协议等,类似的校验方法还有许多,例如和校验,本文主

    2024年02月07日
    浏览(40)
  • MODBUS模型下CRC-16校验C/C++程序实现

    看了很多相关博客,例如http://t.csdn.cn/Ek3RV 又例如http://t.csdn.cn/HGUmo 这些文章所提供的代码似乎都是没有错误的,但很多文章的文字描述和代码并不对应。因此我也整理了一下,也当做是给自己做个笔记。 CRC校验按位计算的程序很好理解,写起来也比较简单,就是把模二除法

    2024年02月16日
    浏览(48)
  • (python)数据校验-CRC32校验

    目录 前言 数据校验概念 CRC校验算法 CRC计算原理 算法逻辑 流程图 CRC算法种类 代码实现CRC算法 python实现算法① python实现算法② 总结         在二次开发eCan上位机应用时,遇到了采用CRC(全称是循环冗余校验)32算法 校验文件传输完整性 的场景,浅浅地记录一下使用心得.  

    2023年04月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包