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码生成多项式

5ee3758d571b03581e9916844c0311a9.jpeg

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

国际通行标准可以查看 http://en.wikipedia.org/wiki/Cyclic_redundancy_check

在数据存储和数据通讯领域,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

d2fc334aa376976190c86d860eabb6cb.png

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

2eb6b26412e2a63593bdbfcb32961e46.png

人有两条路要走,一条是必须走的,一条是想走的,你必须把必须走的路走漂亮,才可以走想走的路~~~

ef3005c36bde80e4c2a6af3a50810892.jpeg

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

### 回答1: FPGA CRC校验原理是使用循环冗余校验算法对数据进行校验。CRC校验通常用于数据传输或存储时,以防止数据在传输或存储过程中被破坏或篡改。在FPGA中,CRC校验器通常是由硬件实现的模块,可以通过FPGA的可编程逻辑进行设计。 CRC校验的原理是将需要校验的数据分成一定大小的数据块,每个数据块都传送时进行校验。校验数据块时,FPGA会计算数据块的CRC,然后与数据传输或存储设备中存储的CRC进行比较。 在FPGA中,校验数据块的过程通常由硬件实现的模块完成。该模块会输入需要校验的数据块和预定义的CRC种子,然后按照预定义的算法进行计算。计算完成后,该模块会输出新的CRC,然后FPGA会与存储或传输设备中的CRC进行比较,以确定数据块是否正确。 总的来说,FPGA CRC校验是一种用于数据传输或存储过程中数据校验的方法。在硬件实现中,FPGA会根据预定义的算法对数据进行计算,并与存储或传输设备中存储的CRC进行比较,以确保数据传输或存储的可靠性。 ### 回答2: FPGA CRC校验是一种基于硬件的数据校验方法,它通过将待校验的数据流和预定的校验值一起输入到FPGA芯片中,利用硬件电路实现CRC计算。CRC校验是一种能够检测数据传输过程中是否发生了错误的技术,它可以检测到单比特错、双比特错甚至更多比特的错。 具体来说,FPGA CRC校验的实现原理是通过将输入的数据流和预定义的CRC校验一同送入CRC电路中,经过一系列的移位、异或和反转操作得到校验结果,然后将校验值与输出的校验结果比较,如果出现差错,则表示数据包出现错误。FPGA CRC校验是一种高效、稳定的校验方法,它广泛应用于数字通信、网络传输、存储设备等领域。 总之,FPGA CRC校验是一种依靠硬件实现的数据完整性校验方式,它通过预定义的校验算法计算出数据包的校验值,并与实际校验结果进行比较,从而检测数据传输过程中是否发生了差错,保证数据在传输过程中的安全可靠。 ### 回答3: FPGA作为一种灵活可编程的集成电路,可以灵活地实现各种数字电子系统中的处理、控制、通信、计算等功能,其中CRC校验是一种应用比较广泛的数据校验协议。其原理是在传输数据的时候,通过添加一个校验到数据后面,接收端可以通过对数据和校验进行计算来验证数据的准确性。 在FPGA实现CRC校验,通常采用硬件的实现方式,首先通过CRC算法计算生成CRC校验表,然后将该表存储在FPGA中。在数据传输过程中,FPGA通过对数据和CRC校验表进行异或运算,得到计算结果,并将该计算结果加到原始数据的末尾,然后将数据和校验一起发送。接收端接收数据后,同样对数据和CRC校验表进行异或计算,并将其与接收到的校验进行比较,如果相同则表明数据传输正确,否则需要重新传输。 FPGA实现CRC校验具有高速、低功耗、可靠性强等优点,特别适合高速数据传输领域,如网络通信、存储设备、无线通信等领域。此外,FPGA还具有可编程性强、适应性广泛等优点,可以根据不同应用需求进行优化设计,提高数据的可靠性和传输速率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值