【Verilog】CRC校验码生成器原理及verilog实现

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

目录

一、CRC的基本原理

 二、CRC生成步骤

2.1举个栗子

三、Verilog实现

四、参考资料

4.1 CRC在线计算器


一、CRC的基本原理

CRC :Cyclic Redundancy Check循环冗余校验码

        将被处理的报文比特序列当做一个二进制多项式A(x)的系数,任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111,该系数乘以2^n(n为生成多项式g(x)中x的最高次幂)以后再除以发送方和接收方事先约定好的生成多项式g(x)后,求得的余数P(x)就是CRC校验码,把它附到原始的报文A(x)后面形成新的报文即为A(x)*x^n+P(x),并且发送到接收端,接收端从整个报文中提取出报文B(x)(即为发送端的A(x),此时不能保证发送正确所以用B(x)表示),然后用与接收端同样的做法将B(x)对应的二进制序列乘以2^n(左移n位)后,除以事先约定好的g(x)得到一个余数p’(x),此时如果接收报文中的CRC校验码与计算得到的校验码相同,即P(x)=p’(x),则传输正确,否则传输有误,重新传输。

上述工作过程中有几点需要注意:

       1.在进行CRC计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;

       2.在进行CRC计算前先将发送报文所表示的多项式A(x)乘以x^n,其中n为生成多项式g(x)的最高幂值。对二进制乘法来讲,A(x)*x^n就是将A(x)左移n             位,用来存放余数p(x),所以实际发送的报文就变为A(x)*x^n+p(x):

       3.生成多项式g(x)的首位和最后一位的系数必须为1,且生成多项式根据不同国家的标准有不同的形式。

CRC校验码检错的原理如下图

【Verilog】CRC校验码生成器原理及verilog实现

 二、CRC生成步骤

  1. 代码与多项式对应

如:1011001  ——> A(x) = x^6 + x^4 + x^3 + 1 (系数对应)

  1. 确定生成多项式

生成多项式g(x)由发送方与接收方提前约定好。

常用有: CRC-16 : x^16 + x^15 + x^2 + 1

  1. CRC生成

P(x) = A(x) * x^n / g(x)   n : g(x)中x的最高次幂

  1. 发送:新的报文

A(x) * x^n + P(x)

  1. 接收:生成CRC与发送CRC比对

接收到的报文为B(x),按步骤3生成接收数据的CRC:p’(x),再与发送方的P(x)比较,若相等,则传输正确。

2.1举个栗子

报文 : 1011001 ,则A(x) = x^6 + x^4 + x^3 + 1

约定生成多项式 : g(x) = x^4 + x^3 + 1(系数为:11001)(n = 4,CRC为4位)

——>A(x) * x^n = x^10 + x^8 + x^7 + x^4(系数为:10110010000)

——>多项式除法:(模2除法)除数和被除数做异或运算(最高位对齐)。

——>多项式除法:

1

0

1

1

0

0

1

0

0

0

0

^

1

1

0

0

1

0

1

1

1

1

0

1

0

0

0

0

^

1

1

0

0

1

0

0

1

1

1

1

0

0

0

0

^

1

1

0

0

1

0

0

1

1

1

0

0

0

1

1

0

0

1

0

0

1

0

1

0

求得余数为: 1010 (CRC)

将CRC附到原报文后面即为新发送的报文:1011001_1010

下面我们将通过verilog代码实现,以及CRC计算器来验证。

三、Verilog实现

module	crc_test(
	input				clk,
	input				rst,
	input		[7:0]	data_in,
	output	reg[3:0]	crc_out,
	output	reg			crc_vld
);

parameter				polynomial	=	5'b11001;
localparam				IDLE	=	3'b001,
						CRC		=	3'b010,
						DONE	=	3'b100;
						
reg		[11:0]			temp = 0;
reg		[2:0]			state;
wire	[11:0]			signal_temp;

assign	signal_temp	=	{data_in,4'b0};

always @ (posedge	clk	or	posedge	rst)begin
	if(rst)begin
		state		<=	IDLE;
		crc_out		<=	4'b0;
		crc_vld		<=	1'b0;
		end
	else case(state)
		IDLE:begin
			crc_out<=	4'b0;
			crc_vld<=	1'b0;
			temp	<=	signal_temp;
			state	<=	CRC;
			end
		CRC:begin
			state	<=	CRC;
			crc_vld	<=	1'b0;
			if(temp[11])	temp[11:7]	<=	temp[11:7]	^ polynomial;
			else if(temp[10])temp[10:6]	<=	temp[10:6]	^ polynomial; 
			else if(temp[9])temp[9:5]	<=	temp[9:5] 	^ polynomial; 
			else if(temp[8])temp[8:4]	<=	temp[8:4]	^ polynomial;
			else if(temp[7])temp[7:3]	<=	temp[7:3]   ^ polynomial; 
			else if(temp[6])temp[6:2]	<=	temp[6:2]   ^ polynomial;
			else if(temp[5])temp[5:1]	<=	temp[5:1]   ^ polynomial; 
			else if(temp[4])temp[4:0]	<=	temp[4:0]   ^ polynomial;
			else state<=DONE;
			end
		DONE:begin
			crc_out	<=	temp[3:0];
			crc_vld	<=	1'b1;
			state	<=	IDLE;
			end
		default : begin
			crc_out	<=	4'b0;
			crc_vld	<=	1'b1;
			state	<=	IDLE;
			end
		endcase
end 
endmodule

运行结果: 4’ha --->-4’b1010

【Verilog】CRC校验码生成器原理及verilog实现

 文章来源地址https://www.toymoban.com/news/detail-514772.html

四、参考资料

CRC校验码的verilog实现与仿真结果_stubben_bear的专栏-CSDN博客_crc16 verilog

4.1 CRC在线计算器

CRC(循环冗余校验)在线计算_ip33.com

报文 :  1011001  (0x59)

生成多项式 : g(x) = x^4 + x^3 + 1

CRC :  1010     ( 0xa)

CRC计算结果截图:

【Verilog】CRC校验码生成器原理及verilog实现

 

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

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

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

相关文章

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

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

    目录 CRC码简介 CRC校验码生成步骤  CRC码生成多项式  CRC校验码Verilog实现 CRC即循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定 CRC码是由2部分组成的,前部分是信息码,后部分是校验码,如果CRC码长共 n bit,信息码长

    2023年04月08日
    浏览(8)
  • Python 实现卡密生成(卡密生成器)

    Python 实现卡密生成(卡密生成器)

    最近我在做一个基于 openCv2 的脚本,顺手写了一个卡密生成器,也给自己保存一下代码。 代码部分 接下来是下载连接,因为比较小就用某云盘了,知道的它下载一直很慢,其实也不算小Python打包出来的东西还是挺大的,压缩包里有一个ui文件不要删,那个是动态加载进的Qt文

    2024年02月21日
    浏览(37)
  • Java-代码生成器的实现

    Java-代码生成器的实现

    最近看了一个开源的项目, jfinal-layui ,然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器,但是从来没有看过相关的源码,所以就研究了一下,个人感觉这个项目的代码生成器还是蛮好的,能够根据指定的数据库和表生成前后端的代码,不过这个项目

    2024年02月02日
    浏览(38)
  • Uniapp微信小程序实现简易生成表单生成器

    Uniapp微信小程序实现简易生成表单生成器

    在开发一些填报小程序,一些小型办公小程序的时候,难免会遇到 较多的需要填写的表单信息 ,纯手撸表单耗时耗力。 下面将分为三个部分 一、创建对应类型表单的结构体 下面是新建商机的表单结构体 字段详情看注释 二、对应的表单生成器模板 formProps就是上面的表单结

    2024年02月09日
    浏览(10)
  • Winform实现简历生成器(Excel版)

    Winform实现简历生成器(Excel版)

    要点 1.项目中到COM类型库中添加Excel和Word的引用 2.大概思路:创建工作簿对象-将Excel简历框架加载到此工作簿-获取工作表-根据位置填入信息-显示工作簿对象Visible为可见-释放工作簿 GitHub - zzp229/WinForm_CreateExcelResume: 通过界面交换,填入个人信息,生成Excel简历(支持图片添加

    2024年02月16日
    浏览(7)
  • 实现高性能ID生成器:详解Java雪花算法

    Java中的雪花算法(Snowflake Algorithm)是一种用于生成唯一ID的算法,可以在分布式系统环境中防止ID重复。这种算法最初由Twitter开发,用于生成Twitter的唯一ID,由于其简单易懂和高效,已成为目前最常用的生成唯一ID的算法之一。 雪花算法生成的ID是一个64位的长整型数字,可

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

    CRC校验原理与FPGA实现(含推导过程)

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

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

    CRC冗余校验的原理和FPGA实现思路

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

    2024年02月08日
    浏览(10)
  • Verilog 实现奇偶校验

    Verilog 实现奇偶校验

    1 奇偶效验(parity check) 是一种校验代码传输正确性的方法,根据被传输的一组二进制数位中“ 1” 的个数是奇数或者偶数来进行校验。采用奇数校验的称之为奇校验,反之称之为偶校验。采用哪种校验是事先规定的,通常会设置一个奇偶效验位,用它是这组代码中1的个数为

    2024年04月09日
    浏览(7)
  • 手机通话记录生成器在线,通话记录生成器下载,通话记录生成器app

    手机通话记录生成器在线,通话记录生成器下载,通话记录生成器app

    在了解通话记录生成器app的时候,铁牛通话记录生成器是一个为用户一键自动生成通话记录的app。如何得到“铁牛通话记录生成器”?在手机上进去佰渡baidu搜嗦,铁牛通话记录生成器,这几个字就可以,其他的不用输入。或者你看这个几个字母jp155再加上一个点com,手动输入

    2024年02月08日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包