Verilog 实现32位并行CRC编解码 可在一个时钟周期出结果

Verilog 实现32位并行CRC编解码 可在一个时钟周期出结果

CRC简介

CRC(Cyclic Redundancy Check,循环冗余校验)是数据帧传输中常用的一种差错控制编码方式,针对要发送的数据帧,使用一些特定的多项式可以计算出CRC校验结果,CRC校验结果和原始数据一起传输到接收端。

接收端在接收数据的同时按照相同的多项式对接收数据进行校验运算,并将 校验结果和接收的结果进行对比,如果二二者相同则认为没有发生传输错误;如果不同,则认为是发生了传输错误。从理论上说,如果接收端计算出的CRC值与接收到的CRC值匹配,数据中仍有出错的可能,但由于这种可能性极低,在实际应用中可以视为0,即没有错误出现。当接收端CRC不匹配时,接收端可以采取不同的措施,例如,丢弃数据包并通知对端,要求对端重新发送,或者只进行丢弃处理,通过高层协议实现数据的重传。

CRC多项式

本文介绍的并行CRC多项式为:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1.为32CRC常用多项式。crc32=32’h104c11db7.

仿真

很多提供的CRC编解码都是Verilog串行资料,因此博主花了点时间验证了Verilog并行实现。废话少说上图:

串行CRC

对于串行32位CRC,需要32个时钟周期出结果。本文一帧数据96bit,所以串行32crc需要分3批运算96次。
第一批
在这里插入图片描述
运算的第一批32位数据32’h00100000,crc结果32’h1d8ac870
在这里插入图片描述
运算的第二批32位数据32’h55555555,crc结果32’ha48ebce5
在这里插入图片描述
运算的第三批32位数据32’haaaaaaaa,crc结果32’hfc3c3755

则,96’h0010000055555555aaaaaaaa的串行CRC结果为32’hfc3c3755.一共用了96个时钟周期运算。

并行CRC

在这里插入图片描述
在这里插入图片描述

第一个时钟32位数据32’h00100000,并行crc结果32’h1d8ac870
第二个时钟32位数据32’h55555555,并行crc结果32’ha48ebce5
第三个时钟32位数据32’haaaaaaaa,并行crc结果32’hfc3c3755
96’h0010000055555555aaaaaaaa的并行CRC结果为32’hfc3c3755.
可以看出并行CRC和串行CRC结果保持一致,但是在同样的一帧96bit数据串行crc用了96个clk.并行crc用了3个clk(不看其他开销)。

具体Verilog的并行CRC代码如下链接下载

链接: https://download.csdn.net/download/baozouxiaoluoli/22331004.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值