一、CRC码的FPGA实现之一CRC的原理

实验目的

学习用FPGA设计一个数据通信中常用的数据检错模块——循环冗余检验CRC模块,熟悉理解CRC的检错原理。

实验原理

循环冗余检验(CRC)算法原理

(一)基本原理

循环冗余检验(Cyclic Redundancy Check),是一种纠错能力很强,使用非常广泛的数据传输差错检错方法,是在串行通信中广泛采用的检验编码。CRC校验码的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+ r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。接收端有两种处理方法:1、计算k位序列的CRC码,与接收到的CRC比较,一致则接收正确。2.计算整个k+r位的CRC码,若为0,则ILY: 宋体">  模2运算是一种二进制算法,CRC校验技术中的核心部分。与四则运算相同,模2运算也包括模2加、模2减、模2乘、模2除四种二进制运算。而且,模2运算也使用与四则运算相同的运算符,即“+”表示模2加,“-”表示模2减,“×”或“·”表示模2乘,“÷”或“/”表示模2除。与四则运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算。这样,两个二进制位相运算时,这两个位的值就能确定运算结果,不受前一次运算的影响,也不对下一次造成影响。

①模2加法运算定义为:
0+0=0        0+1=1        1+0=1        1+1=0
例如0101+0011=0110,列竖式计算:
   0 1 0 1
+ 0 0 1 1
──────
   0 1 1 0

  ②模2减法运算定义为:
0-0=0        0-1=1        1-0=1        1-1=0
例如0110-0011=0101,列竖式计算:
   0 1 1 0
-  0 0 1 1
──────
   0 1 0 1
  ③模2乘法运算定义为:
0×0=0        0×1=0        1×0=0        1×1=1
多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。例如1011×101=100111,列竖式计算:
       1 0 1 1
     ×  1 0 1
    ──────
            1 0 1 1
     0 0 0 0
+ 1 0 1 1
────────
   1 0 0 1 1 1
  ④模2除法运算定义为:
0÷1=0        1÷1=1
多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2除法运算法则,那么余数首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列竖式计算:
               1 1 1 0
       ────────
1 0 1 1〕1 1 0 0 1 0 0
      -1 0 1 1
      ──────
           1 1 1 1
        - 1 0 1 1
       ──────
             1 0 0 0
          - 1 0 1 1
         ──────
               0 1 1 0
            - 0 0 0 0
           ──────
                 1 1 0
3、信息代码多项式:在纠错编码代数中,把以二进制数字表示的一个数据系列堪称一个多项式。例如,二进制序列1010111,用多项式可以表示成:
         M(x)=x6+x4+x2+x+1
M(x)称为信息代码多项式。
4、生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方需要事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的最高位与最低位必须是1。
   几种标准的CRC码生成多项式
 CRC码  生成多项式G(x)
 CRC-4 x4+x+1
 CRC-5 x5+x4+x2+1
 CRC-8 x8+x5+x4+1
 CRC-9 x9+x6+x5+x4+x3+1
 CRC-12 x12+x11+x3+x2+x+1
 CRC-16 x16+x15+x2+1
 CRC-CCITT x16+x12+x5+1
 CRC-32 x32+x26+x23+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

每一个生成多项式都可以与一个代码相对应,如CRC8对应代码:100110001。其中CRC-12、CRC-16、CRC-CCITT 、CRC-32为国际标准的CRC生成多项式。

在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC. CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。

(三)CRC检验码的计算

CRC校验码软件生成方法:

借助于多项式除法,其余数为校验字段。

例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1

假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001

x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;

采用多项式除法:  得余数为: 1010     (即校验字段为:1010)

发送方:发出的传输字段为:  1 0 1 1 0 0 1 1 0 10

                   信息字段       校验字段

接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确。

看一下下面的生成码、解码的过程:发送的数据为“12”这是字符对应的16进制为3132H

接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确)。

每天进步一点点------CRC码的FPGA实现的更多相关文章

  1. ResDepot CRC码

    参考: 百度百科 crc校验 百度百科 crc编码 生日悖论 CRC32能不能用于检验文件的相同性 Egret RES版本控制 一.Egret的ResDepot在发布时,可以添加crc码. 发布前 发 ...

  2. CRC码计算及校验原理的最通俗诠释

    5.3.2 循环冗余校验检错方案 奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误. 1. CRC校验原理      CRC校验原理看起来比 ...

  3. CRC码计算

    循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误. 1. CRC校验原理 CRC校验原理看起来比较复杂,好难 ...

  4. CRC循环冗余校验码总结(转)

    转自 http://blog.csdn.net/u012993936/article/details/45337069 一.CRC简介 先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclic ...

  5. 校验码(海明校验,CRC冗余校验,奇偶校验)

    循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...

  6. CRC校验码原理、实例、手动计算

    目录一.CRC16实现代码二.CRC32编码字符表三.CRC校验码的手动计算示例四.CRC校验原理五.CRC的生成多项式参考 一.CRC16实现代码 思路:取一个字符(8bit),逐位检查该字符,如果 ...

  7. CRC校验码

    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码.对于一个给定的(N,K)码,可以证明存在一个最高次幂为R的多项式G(x)(R ...

  8. CRC(Cyclic Redundancy Check)循环冗余校验码与海明码的计算题

    (17)采用CRC进行差错校验,生成多项式为G(X)=X4+X+1,信息码字为10111,则计算出的CRC校验码是  (17)  .A.0000  B.0100   C.0010   D.1100试题 ...

  9. CRC校验源码分析

    这两天做项目,需要用到 CRC 校验.以前没搞过这东东,以为挺简单的.结果看看别人提供的汇编源程序,居然看不懂.花了两天时间研究了一下 CRC 校验,希望我写的这点东西能够帮助和我有同样困惑的朋友节省 ...

随机推荐

  1. linux vi编辑器光标跳到文件末尾

    1.:0,:1,gg都可以到第一行2.shift+g到末行3.或者:$=检查总行数比如24,:24到第24行

  2. LeetCode 160. 相交链表 (找出两个链表的公共结点)

    题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ 编写一个程序,找到两个单链表相交的起始节点. 如下面的两 ...

  3. 137.在Django中操作session

    在Django中操作session 在django中session默认情况下是存储在服务器的数据库中的,在表中会根据sessionid来提取指定的session数据,然后再把这个sessionid放到 ...

  4. 0219 springmvc-拦截器和响应增强

    拦截器 拦截器分同步拦截器和异步拦截器: HandlerInterceptor 方法和执行时机 可以看DispathcerServlet的原来确定它的三个方法的执行时机: AsynHandlerInt ...

  5. linux安装samba服务器

    1- samba介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软 件,由服务器及客户端程序构成,SMB(Server Messages Block,信息服务块)是 ...

  6. IDAE打包WEB项目 WAR Eclipse转IDEA项目

    接下来这里只说WEB项目打包,相信大多数都是用的WEB项目吧,关于打包WAR,真的很头痛,网上说的试了好好次都不行. 后来懂了之后,真的很简单好么,分享给大家   不要多走弯路了. 注意:   如果你 ...

  7. P5048 [[Ynoi2019模拟赛]Yuno loves sqrt technology III]

    为什么我感觉这题难度虚高啊-- 区间众数的出现次数- 计算器算一下 \(\sqrt 500000 = 708\) 然后我们发现这题的突破口? 考虑分块出来[L,R]块的众数出现个数 用 \(\text ...

  8. 曼孚科技:AI机器学习领域常用的15个术语

    机器学习是人工智能(AI)的核心,是使计算机具有智能的根本途径.​ 本文整理了一下机器学习领域常用的15个术语,希望可以帮助大家更好的理解这门涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多个领 ...

  9. IP地址分类及其相关计算问题

    IP地址分类及其相关计算问题 公网IP和子网IP 公网IP: • A类:1.0.0.0 到 127.255.255.255 主要分配 给大量主机而局域网网络数量较少的大型网络 • B类:128.0.0 ...

  10. WordPress 背后的故事竟然是这样

    原文链接:The Story Behind the New WordPress.com 译者:杰微刊-Leo Xu 一年半以前,我们对使用 WordPress 构建网站所需要采用的技术和开发流程进行大 ...