原创 [博客大赛]CRC 校验:从原理到实现(二)

2013-6-9 20:38 3051 16 18 分类: FPGA/CPLD

CRC 校验:从原理到实现(二)

 

1、收发端CRC校验的可选机制

 

CRC校验是为了保证信息在发送端和接收端之间传输的完整性,所以除了在收发两端都要实现CRC计算之外,还需要确定一些具体的机制,主要的几种机制分类列举如下:

 

表 1-1 收发端CRC校验的六种机制

 

机制

发送端

接收端

初始寄存器值

校验序列

初始寄存器值

校验范围

正确判定

1

0

不操作

0

明文

结果=校验序列?

2

0

不操作

0

明文+序列

结果=0

3

0

逐位取反

0

明文+序列

结果=Magic Num

4

1

不操作

1

明文

结果=校验序列?

5

1

不操作

1

明文+序列

结果=0

6

1

逐位取反

1

明文+序列

结果=Magic Num

 

初始寄存器。初始寄存器的值为0,符合一般的CRC校验原理,也便于在MATLAB中计算。但是容易出现“前导0”问题,即在明文序列之前插入或者删除0序列,这是由于00异为0。因此,将初始寄存器值设为全1可以避免“前导0”的出现。发送端和接收端的初始寄存器值须保持一致以保证两端校验正确。

 

接收端的校验范围。可以选择明文或者明文+序列,若传输完整无误,明文的CRC计算结果等于收到的校验序列,明文+序列的计算结果归0。两者相比,后者实现流程简单。

 

Magic Num。明文+序列的计算结果归0并不定能严格证明信息传输完整无误,无法检测“拖尾0”问题,即在序列之后插入或者删除0序列,同样是由于00异为0。所以引入了Magic Num的机制,在发送端需要对校验序列逐位取反添加在明文序列之后发送,在接收端对明文+序列做校验,若结果等于Magic Num则说明信息传输完整无误。Magic Num是与生成多项式对应的序列,计算过程如下:

 

一般情况下,在接收端对明文+序列做计算,结果为0说明传输完整无误:20130606160813283.jpg,其中M是明文序列,R是校验序列,G是生成多项式。

 

/R表示R1取反,我们得到:20130606160839466.jpg
20130606160921164.jpg

因此,由接收端计算出的无差错的传输的校验和应该是:20130606160947418.jpg,这就是Magic Number

 

Magic Num的校验方法在网络传输的设计中比较常见,在802.3IP核和802.11标准的附录框图中对CRC32校验的设计都采用了初始寄存器全1Magic Num的方式

 

参考资料:

 

http://blog.sina.com.cn/s/blog_62d9edac01015lsd.html

http://blog.csdn.net/highyyy/article/details/6208227 

http://www.eefocus.com/Galois/blog/10-02/184555_16c21.html 

http://wenku.baidu.com/view/a5b7d38002d276a200292e80 

文章评论2条评论)

登录后参与讨论

用户271389 2013-6-11 11:32

谢谢支持

用户403664 2013-6-9 15:40

赞系列博文!
相关推荐阅读
用户271389 2013-06-09 21:00
建立时间、保持时间和时序约束条件
建立时间、保持时间和时序约束条件 1、什么是建立时间(Tsu)和保持时间(Th) 以上升沿锁存为例,建立时间是指在时钟翻转之前输入的数据D必须保持稳定的时间;保持时间是在时钟翻转之后输入数据D必须保...
用户271389 2013-06-09 15:40
[博客大赛]CRC 校验:从原理到实现(一)
CRC 校验:从原理到实现   CRC校验,就是循环冗余校验,Cyclic Redundancy Check,是数据通信领域中最常用的一种差错校验码,用于保障数据的完整性。其特征是信息字段...
用户271389 2013-06-06 16:35
数字逻辑设计中的触发器和锁存器
数字逻辑设计中的锁存器和触发器 1、锁存器和触发器的定义和比较 锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态,当Gate输入为高电平时,输入D透明传输到输出Q;当Gate...
我要评论
2
16
关闭 站长推荐上一条 /2 下一条