CRC课程设计报告(共18页).doc
精选优质文档-倾情为你奉上 目 录 序言 2第一章 通信系统课程设计要求要求和方案 31.1通信系统课程设计总体要求 31.2课程设计题目 31.3 CRC编解码器设计方案 3 第二章 Quartus 简介 52.1 Quartus II简介 5第三章 (24,16)CRC 循环码编解码器的设计 73.1 CRC循环校验码的基本原理 7 3.1.1 CRC校验码的生成 7 3.1.2 CRC校验码校验原理 73.1.3 CRC循环码纠错原理 8 3.2 (24,16)CRC循环码编解码器的实现 93.2.1 CRC-8 生成多项式 93.2.2 (24,16)CRC 循环码编码器的设计 103.2.3 (24,16)CRC 循环码解码器的设计 113.2.4 (24,16)CRC 循环冗余校验码编解码器总图 14体会与建议 16参考文献 17附录 18 序 言 通常,数据通信中的编码可以分为两大类,分别是信源编码和信道编码。在实际应用中,为了提高数据通信的可靠性而采取的编码称为信道编码,也称做抗干扰编码。一般来讲,数据通信要求传输过程中的误码率应该足够低,这样才能真正符合实际应用的具体要求,为了降低数据通信线路传输的误码率,通常有改善数据通信线路传输质量和差错检测控制两种方法。 实现差错检测控制的方法很多,循环冗余校验(CRC)就是一类重要的线性分组码。循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。CRC校验码码的作用是:发送方发送的数据发送给了接收方,但是由于在传输过程中信号干扰,可能出现错误的码,造成的结果就是接收方不清楚收到的数据是否就是发送方要发的数据,所以就有了CRC校验码。保证了发送跟接受的数据是否一样,要纠错的话,还需对软件进行设计,毕竟传输的是2进制,如果知道了哪一位出错了,可以把那一位取反,需要对软件进行优化。CRC也是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。它是利用除法及余数的原理来作错误侦测的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。 本次课程设计主要设计(24,16)校验码的编码与解码,本次课程设计是介绍如何通过quartus软件,采用原理图输入法,分别完成相应的编码和解码;最后将编码和解码电路图结合,检查编码解码过程是否发生错误。通过课程设计验证CRC校验码的检错纠错功能。 第一章 通信系统课程设计总体要求和方案1.1通信系统课程设计总体要求 1、根据题目要求的功能进行设计;设计出整体电路图和流程框图; 2、设计的电路图的每个组成部分须有设计说明;以及整体电路概述; 3、采用原理图或 VHDL 语言输入法,在计算机上进行编译和软件仿真。1.2课程设计题目 (24,16)CRC 循环码编解码器设计(2 人合作,本设计偏重于译码) 1、采用原理图输入法。 2、根据 CRC 循环码的编解码原理,确定编解码器具体设计方案。 3、设计 (24,16)CRC 循环码编解码器电路图。 4、调试及彷真时序波形。 1.3 CRC编解码器设计方案 CRC循环校验码的产生和校验既可用硬件实现,也可用软件实现,较经典的硬件实现算法有移位计算法、查表计算法和公式法。 方法一、移位计算法。移位计算法就是直接模拟CRC校验码基本原理中除法的过程,来得到余数从而得到即CRC值。设生成多项式g(x)有r位,由于最高位是要一直消掉的,所以只需要一个r位的寄存器。 图1 移位算法实现框图 图中由R0-Rr-1构成的CRC 寄存器是一个r位移位寄存器 组,用来存储r位的CRC校验码R(x)。运算控制开关g1-gr-1的位置与生成多项式G(x) 的系数相关,对应系数1的开关接通反馈支路(上端),否则接地(右侧)。编解码前清零CRC寄存器,在时钟驱动下,待校验的信息码B(x)经运算处理逐位移入CRC寄存器中,当信息码全部输入之后,CRC寄存器中存放的值即为生成的CRC码。另只须输出开关C开始接下端,在时钟驱动下逐位输出待校验的k位信息码B(x) ,然后改接上端,再逐位将CRC寄存器中的校验码R(x)输出即可。该算法原理简单,易于硬件实现,但是效率较低,主要用于串行通信中,不适合高速通信的场合。 方法二、查表计算法。该算法是指事先把待校验的信息码B(x) 的所有CRC码全部计算出来,放在一个表里,编码时只要根据M(x)从表中找出对应的值进行处理即可。编解码前清零CRC寄存器,编码时待信息码M(x)输入结束,CRC寄存器的值即为校验码R(x) ;解码校验时待传送码B(x)输入结束时,若CRC寄存器中的值为零,则表明传输无误。该算法执行速度快,适合于高速通信场合,但由于需要大容量的存储表,花费的硬件资源较移位计算法要大得多。 图2 查表算法实现框图 方法三、公式法。公式法与查表算法一样,也是以字节数据为输入,采用递推算法,不同之处在于公式法使用公式实时计算CRC码,从而省去了查找,不仅节省了硬件存储资源,还能进一步提高系统的运行速度。因此可以认为公式法是目前前景较好的一种实现方法。 第二章 Quratus II简介2.1 quartus ii简介 Quartus II 是Altera公司开发的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 图3 Quartus软件打开后的界面Quartus II 的优点: Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括: 可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件; 可用于芯片(电路)平面布局连线编辑; 是一款功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具; 支持软件源文件的添加和创建,并将它们链接起来生成编程文件; 使用组合编译方式可一次完成整体设计流程;自动定位编译错误; 是一款高效的期间编程与验证工具; 可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件; Quartus ii能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。 该软件界面友好,使用便捷,功能强大,是一个完全集成化的可编程逻辑设计环境,是先进的EDA工具软件。Quartus II 可以在XP 、Linux 以及Unix 上使用,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。 使用软件时,我们可以双击桌面快捷方式图标,打开软件进行编辑。 总而言之,参照设计方案与软件结合使用,我们选择方法一:移位计算法来设计CRC-8循环码的编解码器。该方法简单实用,易于quartus进行硬件电路的设计仿真。 第三章 (24,16)CRC循环码编解码器的设计3.1 CRC循环校验码的基本原理 利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。这种编码又叫(n,k)码。对于一个给定的(n,k)码,可以证明存在一个最高次幂为n-k=r的多项式g(x)。根据G(x)可以生成监督码,而g(x)叫做这个CRC码的生成多项式。 3.1.1 CRC校验码的生成 校验码的具体生成过程为: 设发送的信息码用多项式m(x)表示,它的生成多项式为g(x)。则m(x)的最高次项为 k-1。将 m(x)乘以xn-k,,得到xn-k*m(x); 用xn-k*m(x)去模2除g(x),得到余式r(x),即 r(x)=xn-k*m(x) mod g(x)r(x)的次数必小于g(x)的次数,即小于 n-k。 将余式加于信息位之后作为监督位,即将 r(x)与 xn-k*m(x)相加,得到的多项式为码多项式,因为它必能被 g(x)整除,且商的次数不大于 k-1。因此循环码的码多项式可表示为 T(x)= xn-k*m(x)+ r(x) 其中,xn-k*m(x)代表信息位;r(x)是 xn-k*m(x)与g(x)模2相除得到的余式,代表监督位。3.1.2 CRC校验码校验原理因为在数据传输过程中,可能会由于噪声或传输特性不理想而使数据序列中的某一位或某些位发生错误,导致接收端接受的序列发生错误。所以必须在数据的接收端进行校验,可以很容易地实现对数据传输正确性的检查。编码电路的主体是由生成多项式构成的除法电路,再加上适当的控制电路组成。基于CRC编码原理,可见其校验原理也是十分简单的,它在接收端只需要对接收到的序列直接进行除法取余式运算。若余式为全0,则表示数据传输过程中没有发生错误;若不为0,则表示发生错误,那么就需要对错误的序列进行相应的处理操作。检验过程的多项式除法形式可以表示为两种形式: M(x)/G(x)=Q(x)+R(x)/G(x) M(x)= R(x) mod G(x) 由此可见,生成多项式G(x)对于CRC循环码而言是至关重要的,决定了CRC码的算法和最终结果。3.1.3 CRC循环码纠错原理以(7,3)码为例可证明:表1 (7,3)码E(x)与S(x)对照表 1110 0111 1101 1000 0100 0010 1 0001 1 可证明,根据单个错误出现在最高位的错误图样及相应的校正子S设计的组合电路,可纠任一一位错。图4 (7,3)循环码译码器设接收码组B=表2 (7,3)循环码译码器译码原理3.2 (24,16)CRC循环码编解码器的实现 3.2.1 CRC-8 生成多项式 生成多项式特点如下: (1)g(x)是常数项为1的 r=n-k 次,也是循环码中次数最低的多项式; (2)所有许用码组多项式都是g(x)的倍式; (3)g(x)是xn+1的一个因式。CRC-8 的生成多项式为:g(x)= x 8+ x5 + x4 +1 或 g(x)= x 8+ x2 + x +1 3.2.2 (24,16)CRC 循环码编码器的设计 CRC 循环码的生成多项式并不唯一,在设计中我们选择x8+x5+x4+1作为(24,16)CRC循环码的生成多项式。(1)编码之步骤如下: m(x)乘以 xn-k r(x)= xn-k*m(x) mod g(x) T(x)= xn-k*m(x)+ r(x) (2)具体电路图如下: 图5 (24,16)CRC循环编码器电路 图6 (24,16)CRC编码器电路封装(3)电路工作原理 g(x)的最高次数r等于移位寄存器的级数;g(x)的非零系数对应移位寄存器的反馈抽头。 执行时,首先将移位寄存器清零,前16位信息位输入时,门1断开,门2接通,直接输出信息码元,同时送入移位寄存器进入除法运算。 第 16位移位脉冲到来时,将除法电路运算所得的余数存入移位寄存器。第17-24次移位时,门1接通,门2断开,输出监督码。输入的信息元不同,得到的码元序列也不同。由附录可见: 若信息码为 1111 1111 1111 1111,可以得到信息序列为 1111 1111 1111 1111 ; 若信息码为 0000 0000 1111 1111,可以得到信息序列为 0000 0000 1111 1111 ; 若信息码为 1010 1010 1010 1010 ,可以得到信息序列为 1010 1010 1010 1010 。编码仿真结果波形为:(波形有 10ns 的延时)图7 输入信息码为1010 1010 1010 1010 时的仿真波形波形分析:输入信息码为1010 1010 1010 1010,控制信号AA控制输入过程,当16位信息码输入完成后,切换门电路开关闭合,最终生成8位监督码,由Y输出,得到的循环码与计算所得结果一致,证明了编码器设计无误,符合基本要求,为解码做好准备。3.2.3 (24,16)CRC 循环码解码器的设计(1) 解码器设计原理 接收端解码的目的是检错。由于任一码多项式A(x)都应该可以被生成多项式 g(x)整除,所以在接收端可以将接收码组B(x)用生成多项式g(x)去除。若余式为0,则表示没有误码,接收端正常接收码元;若余式不为0,则表示传输出错。即: 余式为0,无错 接收码组B(x)/g(x)= 余式不为0,出错 所以可以用余项是否为零来判断码组中有无误码。 对于纠错,可以根据单个错误出现在最高位的错误图样及相应的校正子设计组合电路,纠任一一位错。(24,16)CRC码的校正子综上所述,纠错的步骤如下:a.把接收码组R(x)送入除法电路得到余数即为S(x)。b.由典型生成矩阵 G 和典型监督矩阵 HT 之间的关系可进一步求得,再由 S=E.HT 可得错误图样 E(x),这样就可以确定错码的位置。c.根据错误的码位,对该码位的码元取反输出便可得到原发送码组 T (x)。其中,T (x) 的前16位即为译出码元 m(x)。(2) 具体电路图如下: 图8 (24,16)CRC循环解码器电路解码仿真波形结果为:图9 信息码为1010 1010 1010 1010 0011 0100时的解码波形分析:CLK为时钟信号,IN是输入信号,OUT为解码输出信号。PAN判断信息码是否出错,如果出错则显示高电平,否则为低电平;FIND找到错误所在位置,用高电平表示。由于整个原理图过于繁杂,故将24个缓存器封装成一个元件,原理图如下: 图10 24个触发器搭成的移位寄存器并将除法电路部分做了改进,用两个74175芯片代替了8个D触发器,简化了电路。改进后的电路如下:图11 改进后的(24,16)CRC循环解码器电路 图12 (24,16)CRC解码器电路封装解码仿真结果波形为: 图13 信息码为1010 1010 1010 1010 0011 0110时的解码 波形分析:接收端信息为1010 1010 1010 1010 0011 0110,即为正确序列码组,输出应该从第二十五个时钟,即下一周期开始观察,如图,每个周期为 20us,即从480us开始观察,输出OUT为正确信息序列,判断信号PAN为低电平,表明解码为正确码组。 又如输入错误码组:1110 1010 1010 1010 0011 0110 当输入码组为错码时: 图 14 输入错误码组时的解码波形 波形分析:如图,接收端信息为1110 1010 1010 1010 0011 0110,即为错误序列码组,输出从第二个周期开始观察,输出OUT为接收信息,系统实现纠错功能,输出为1010 1010 1010 1010 0011 0110,并且判断信号PAN在出错位处为高电平,可见与设计思想一致。 3.2.4 (24,16)CRC 循环冗余校验码编解码器总图 将CRC编解码时建模的图形连接在一起,组成(24,16)CRC循环编解码器。如下所示: 图15 (24,16)CRC 循环编解码器 编解码仿真结果波形为:图16 输入信息码为1010 1010 1010 1010的编解码波形波形分析:输入信息码为1010 1010 1010 1010,控制信号AA控制输入过程,当16位信息码输入完成后,切换门电路开关闭合,最终生成8位监督码。由OUT输出编码后的信息序列。判断电平PAN显示低电平,表示接受到正确信息序列。证明该设计无误,符合基本要求。由于该课题为信道编码,对于循环冗余校验码编解码器总图传输过程中出错时的情况不易仿真,此处不做讨论。体会与心得通过这一次通信课程设计,让我对CRC校验码有了很深的了解,也相应的对quartus软件的使用有了很大的加深。经过我的努力,还是比较符合要求的完成了课题的设计。这也使我明白了,学习上的很多事情,只要肯下功夫去钻研,就一定能够有所收获的。作为通信专业的学生,通过通信原理的课程设计,可以提高我们对通信电路设计领域的认识,有利于培养我们在通信电路设计方面的能力。通过和同学分工合作既锻炼了我们合作能力同时也提高了我们独立分析问题和解决问题的能力。设计过程的复杂加老师的严格要求有益于培养我们严谨的工作作风。课程设计过程中我遇到了不少问题,尤其是在设计编码部分的纠错功能时遇到了屏障,多亏了同学和老师的指点帮助,才让我顺利完成设计,对此我十分感谢他们。通过理论学习到实际应用,我们更加深刻了解到了理论与实践结合的重要性,在设计之中也遇到了种种问题和困难,通过对这些问题的解决也相应的提高了我们的动手和解决问题的本领,总之,此次课程设计我收益匪浅。 参考文献 1杜慧敏,李宥谋,赵全良,基于 Verilog 语言的实用 FPGA 设计 M,西安电子科技大学出版社,2005 年2原东昌,李晋炬,通信原理与实验M,北京理工大学出版社,2000 年3 蒋安平,循环冗余校验码的硬件并行实现J,微电子学与计算机, 2005年4 夏泽中,柴庆芬,循环冗余校验码算法的分析及VHDL语言实现J,计算机与数字工程,2005年 附 录CRC-8 监督码具体计算方法如下:若输入信息码为0000 0000 1111 1111, 可得监督码为,与信息码一一对应。同理可得:若信息码为 1111 1111 1111 1111,可以得到信息序列为 1111 1111 1111 1111 ; 若信息码为 1010 1010 1010 1010 ,可以得到信息序列为 1010 1010 1010 1010 。专心-专注-专业