项式
去除。当传输中未发生错误时,接收码组与发送码组相同,即
R?x??T?x?R?x?Gx,故接收码组必定能被??整除;若码组在传输中发生错误,
R?x?R?x??Q?x??R?x??T?x?R?x?G?x?G?x?G?x?则,被除时可能除不尽而有余项,即有
因此,我们就以余项是否为零来判别接收码组中有无错码。 需要指出,有错码的接收码组也有可能被
G?x?G?x?整除。这时的错码就不能检出
了。这种错误称为不可检错误。不可检错误中的误码数必定超过了这种编码的检错能力。
2.6.1 CRC解码操作过程
以前文0x02数据(CRC = 0x800F)为例,计算如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0
表2-4,8位数据0x02的16位CRC数据校验
当然,也可以使用比较直观的办法,只对数据0x02求CRC值,如果等于接收到的CRC,那么也说明数据没有问题。
12
第3章 方案设计
3.1 实现方案分析
CRC算法可以用硬件实现,也可以用软件实现,硬件实现的方式电路结构复杂,使得应用系统功能模块增多,增大系统体积降低了集成度,批量生产的产品中提高了产品成本;使用软件实现的方法计算的速度受限于系统CPU的速度,但是随着CPU的集成度和运行速度的提高,这样的影响显得微不足道,所以采用软件实现的方法增加了系统集成度,从而提升系统的通信效率,在进行批量生产时可以极大的降低成本。
利用软件实现可以采用的器件有MCU和CPLD,基于MCU的方案中由于MCU的处理数据的位宽固定,且运行速度不如基于CPLD的方法快,基于CPLD的方案管脚配置更灵活,运行速度更快更稳定。故次设计中采用基于CPLD的软件实现方法来完成CRC的编解码校验。
常用CRC软件实现方法是串行计算方法,使用一位数据输入,n位长度的原始数据连续计算n次后得出校验码,软件串行方式处理需要较多个CPU时钟周期,可以工作在较高的时钟频率下。但随着通信速度的不断提高,高的数据传输带宽要求CRC的计算速度越来越快,串行计算的方法已经不适应要求,所以越来越多的使用并行计算方法。
根据应用的需要,有两种常用的方法,来实现CRC的算法,查表法和逐位运算法,它们特点如下。
3.1.1 查表法实现方案分析
查表法,就是预先算好基本的CRC值,并存储于存储器中,需要时直接
查询存储器中的CRC数据表,它是以字或字节为单位进行操作的,而不进行耗时
- 13 -
的位运算。这样查表法的速度就会增加,与基于位运算的方法相比在达到同等效果的时候就可以降低系统主频,从而使功耗大大降低,但这样的代价就是付出大容量的存储器。以一个8位的数据为例,作一次异或操作就能够完成着一个字节。表中的CRC值与其索引值有一个一一对应的关系。
8位数据的CRC查表法实现流程图如下:
开始 初始化CRC寄存器 产生CRC表索引 CRC左移n位 CRC与表数据做异或运算 运算结束吗? 最后异或运算 结束
图3-1 查表法流程图
3.1.2逐位运算法实现方案分析
逐位运算法,直接根据表2-3的原理实现的。数据每次移入一位时,就需要重新对每一位进行再次运算,因此: 移位操作的次数 = 总的数据位数 - 16
由此可以得出,当数据位数比较多时,CPU使用的时间还是比较多的,数据位数
14
四川理工学院本科生毕业(论文)设计
越多,就意味着使用更多的CPU机时,为了达到查表法同样的速度,就必须加倍的提高系统主频,由此会带来了功耗增加的问题。
8位数据逐位运算法实现CRC的流程图如下:
开始 初始化CRC寄存器 设定下一个字节 高位为1吗? 1. 左移1位 2. 下一字节最高位移3. 左移1位 4. 下一字节最高位移异或运算 运算结束吗? 最后异或运算 结束
- 15 -
图3-2 逐位运算法流程图
3.1.3 现实需求分析
CRC码校验根据第二章理论分析可知,实现CRC的基本原理,简单的说,就是原始数据通过某种算法,得到一个新的数据,而这个新的数据与原数据有着固定的内在关系,通过把原数据和新数据组合在一起,形成新的数据,因此这个新数据具有自我检验的能力。然而,前面经验证的理论公式仅适用于理论模型,而实际中还需要考虑几个问题。
Mx首先要考虑CRC的数据位,不管??有多长的数据位,总是希望有一个固
RxMx定位数的??,以便在实现时可以节省很多资源。同时考虑到??的数据位长度可能比CRC位数短,为了得到一个16位(或者32位)的数据长度,必须将
Mx原有数据扩展到16位以上,才能得到一个16位的余数。通常的做法是在??的右边添加相应的CRC位数,例如16位则需要增加16个数据位,32位需要增加32个数据位。
其次,规定CRC的最高位和最低位必须为1,由于标准的CRC是17位和32位,因此,如何在目前8位、16位、32位、64位等数据总线的计算机上实现通常是需要考虑的。在实际应用中,我们并不需要考虑这个最高的CRC位,因为它是总是被舍去,故只要考虑余下的16位(或者32位)就可以了。
第三,商不需要,因此根本不要考虑。
第四,除法运算没有数学上的含义,而是计算机中的模2算法,即每个数据位,与除数作逻辑异或运算,因此不存在进位或者借位问题。
3.2 系统硬件设计
本设计以CPLD为核心进行设计,通过需求分析本设计中所需外围电路主要有:控制器核心、电源模块、时钟模块、调试测试接口、复位及复位配置系统。由于CPLD的I/O管脚的可配置性,在设计中必须考虑I/O管脚功能的分配,以便使系统设计中PCB布局布线简洁和操作方便。
16