《基于VHDL的CRC编解码设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL的CRC编解码设计.docx(26页珍藏版)》请在课桌文档上搜索。
1、摘要循环冗余校验码是一种广泛应用检错编码,本设计以MaXPIUSII为开发平台利用VHDL语言完成了CRC编解码设计。设计采用了模块化的方法,给出了CRC编解码的结构框图和局部仿真结果,结果说明该系统的设计方案正确。关键词:VHDL;循环冗余校验(CRC);检错ABSTRACTCyclicredundancycheckcodeisawidelyusederrordetectioncode,thedesignoftheMaxPlusIIdevelopmentplatformforthecompletionoftheCRCusingVHDLlanguagecodecdesign.Designuse
2、samodularapproach,giventhestructureofCRCdecodingblockdiagramandsomesimuIationresults,theresultsshowthatthesystemisdesignedcorrectly.Keywords:VHDL;Cyclicredundancycheck(CRC);Errordetection目录摘要ABSTRACT第1章引言O1.1 概述O1.2 内容概要2第2章CRC编解码理论22.1 纠错编码的根本原理22.2 模2运算原理52.3 3CRC分类52.3.1 标准的CRC62.3.2 非标准的CRC62. 4
3、循环码理论根底63. 5循环码编码方法73.1.1 CRC产生操作过程82. 6循环码解码方法82.1.1 CRC解码操作过程9第3章方案设计93. 1实现方案分析93.1.1 查表法实现方案分析IO逐位运算法实现方案分析113.1.3 现实需求分析123.2 系统硬件设计133.2.1 电源模块133.2.2 时钟模块143.2.3 调试测试接口143.2.4 复位电路设计143.3 设计工具及开发流程14第4章程序模块设计及仿真154.1 程序设计与仿真154.1.1 编码模块设计与仿真174.1.2 解码模块设计与仿真184.1.3 循环冗余码编码模块与解码模块联合运行19第5章结束语1
4、9致谢20参考文献20附录A20附录B22第1草引言1.1 概述通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,方瞪模拟信息源“5一或多1调制器_某方- + l g 百 F H 上信道解调 传送器一TFk用何种 受信者模拟通信是利用正弦波的幅用L箜抽0鸟的变化,或者利用脉冲的幅度、宽度或位置变化来模拟原始信号,11噪赢一j目的。RT模拟通信系图1-2数字通信系统模型与模拟数据通信相比拟,数字数据通信具有以下优点: 数字技术的开展较模拟技术更快,数字设备通过集成电路很容易实现,并与计算机相结合,而由于超大规模集成电路技术的迅速开展,数字设备的体积与本钱的下降速度大大超过模拟设
5、备,性能价格比高; 来自视频、声音和其他信息源的各类数据均可统一为数字信号的形式,并通过数字通信系统传输; 在长距离数字通信中可以通过中继器放大和整形来保证数字信号的完整性而不累积噪音: 以数据帧为单位传输数据,并通过检错编码和重发数据帧来发现与纠正通信错误,从而有效保证通信的可靠性; 使用加密技术可有效增强通信的平安性; 多路光纤技术的开展大大提高了数字通信的效率。“信息社会信息经济等名称越来越多的出现在我们的生活中,生活离不开信息,随着社会生产的开展,科学技术的进步,人们对传输信息的要求急剧增加到了20世纪20年代,如何提高传递信息的能力和可靠性己成为普遍重视的课题,在传输过程中发生错误后
6、能在收端自行发现或纠正的码。数字信号在传输过程中,由于受到干扰的影响,码元波形变坏。接收端收到后可能发生错误的判决。由于乘性干扰引起的码间串扰,可以采用均衡的方法纠正.而加性的影响那么需要用其他的方法解决。在设计数字数字通信系统时,应该首先从合理选择调制制度,解调方法以及发生功率等方面考虑,使加性干扰缺乏以影响到达误码率的要求,在仍不能满足要求是,就要考虑采用查错控制措施了。一些通用的系统,其误码率要求因用途而异,也可以把查错控制作为附加手段,在需要时加用。从查错控制角度看,按照加性干扰引起的错码分布规律的不同,信道可以分为三类。即随机信道、突发信道和混合信道。在随机信道中,错码的出现是随机的
7、,而且错码之间的统计是独立的。在突发信道中,错码是成串集中出现的,即在一些短促的时间段内会出现大量错码,而在这些短促的时间段之间存在较长的无错码区间。查错控制技术主要有以下四种:检错重发:在发生码元序列中参加过失控制码元,接收端利用这些码元检测到有码元时,利用反相信道通知发送端,要求发送端重发,直到正确接收为止。所谓检测到有码错,是指在一组接收码元中知道有一个或一些错码,但是不知道该错码该如何纠正。采用检错重发技术时,通信系统需要有双向信道传送重发指令。前向纠错:前向纠错一般简称FEC(ForwardErrorCorrection)这时接收端利用发送端在发送码元序列中参加的过失控制码元,不但能
8、够发现错码,还能将错码恢复其正确取值。在二进制码元的情况下,能够确定错码的位置,就相当于能够就纠正错码。采用FEC是,不需要反相信道传送重发指令,也没有因反复重发而产生的时延,故实时性好。但是为了能够纠正错码,而不是仅仅检测到有错码,和检测重发相比,需要参加更多的过失控制码元。故设备要比检测重发设备复杂。反应校验(FeedCheckout):这时不需要在发送序列中参加过失控制码元。接收端将接收到的码元原封不动地转发回发送端。在发送端将它和原发送码元逐一比拟。假设发现有不同,就认为接收端收到的序列中有错码,发送端立即重发。这种技术的原理和设备都很简单。但是需要双向信道,传输效率也比拟低,因为每个
9、码元都需要占用两次传输时间。检错删除(deletion);它和检错重发的区别在于,在接收端发现错误码后,立即将其删除,不要求重发。这种方法只适用在少数特定系统中,在那里发送码元中有大量多余度,删除不分接收码元不影响应用。循环码是线性分组码中最重要的一个子类,它的结构完全建立在有限域的根底上,可以用近似代数的方法精确描述,循环码是1957年由普兰奇(Prange)提出的,此后几十年中得到了充分的研究和开展。起初人们认识到并感兴趣的是循环码的外在特点,即循环码码字的循环移位后仍然是码字,这个特点给循环码的编译码实现带来了便利。在以后的实践中,人们从循环群的角度,在代数机构、纠错性能控制等方面找到了
10、循环码更加吸引人的优越之处。目前,使用查错控制系统中使用的线性分组码几乎都是循环码或循环码的子类。循环冗余校验码(CRC)是一种系统的缩短循环码,广泛应用于帧校验。1.2 内容概要本设计主要分析循环冗余码理论,在理论根底上探讨其运用VHDL语言实现其算法,设计主要分为两个模块,即循环冗余码编码模块和循环冗余解码模块,主要编程工具为MaxPlusIlo本设计主要内容首先从了解循环冗余校验码的实际应用入手,然后分析纠错编码的根本原理,研究程序设计中的根本运算规那么(模2运算)入手,深入分析循环冗余码的编解码理论及其工程实现算法。提出编解码方案并进行比拟分析,选出符合本设计要求的实现方案,进行硬件设
11、计,最后进行程序的模块化设计,并进行仿真验证,模块仿真验证无误进行模块组合调试仿真。分析仿真结果得出结论。第2章CRC编解码理论2.1 纠错编码的根本原理信道编码是在被传送的信息中附加一些监督码元,来检错和纠错。下面以三位二进制码组为例,说明检错纠错的根本原理。三位二进制码元共有2二8种可能的组合;000、001、010、OlK100101110Ill=下面分三种情况讨论如果这8种码组都用于传送消息,即每个码组都是许用码组。在传输过程中假设发生一个或多个误码,那么一种码组会错误地变成另一种码组。这样的编码既不能检错,也不能纠错,完全没有抗干扰能力;(2)假设只选其中的OO0、011、101、1
12、10四种码组作为许用码组。除上述4种许用码组以外的另外4种码组001、010、100、Ill称为禁用码组。经观察我们可以发现,许用码组中“1的个数为偶数个,禁用码组中“1的个数为奇数个。如果在传输过程中发生了一位或三位的错码,那么1的个数就变为奇数个,许用码组就变为禁用码组;接收端一旦发现这些禁用码组,就说明传输过程中发生了错误。用这种简单的校验关系可以发现一个和三个错误,但不能纠正错误。例如,当接收到的码组为OlO时,我们可以断定这是禁用码组,但无法判断原来的正确码组是哪个许用码组。虽然原发送码组为IOI的可能性很小(因为发生三个误码的情况极少),但不能绝对排除;即使传输过程中只发生一个误码
13、,也有三种可能的发送码组:000、Oll和110。显然,上述编码无法发现2个错码。以上编码方法相当于只传递00、01、10、Il四种信息,而第三位是附加的监督位。这位附加的监督码位与前面两位信息码元和在一起,保证码组中I码的个数为偶数。下表示出了这种情况:表2I信息位与监督位的关系信息位监督位晴000云Ol1阴101雨110(3)如果进一步将许用码组限制为二种:000和111。那么不难看出,用这种方法可以发现所有不超过2个的误码:或能纠正一位错码。纠正一位错码的方法是:将8个码组分成二个子集,其中000、100、010,001与许用码组OoO对应,111、011、101、110与许用码组Ill
14、对应;这样,在接收端如果认为码组中仅有一个错码,只要收到第一子集中的码组即判为000,收到第二子集中的码组即判为Illo例如,当收到的码组为禁用码组100时,如果认为该码组中仅有I个错码,那么可判断此错码发生在1位,从而纠正为Oo0:假设认为上述接收码组中的错码数不超过两个,那么存在两种可能性:000错一位和Ill错两位都可能变成10(),因而只能检测出存在错码而无法纠正它。分组码一般用符号(n,k)表示,其中k是每个码组中二进信息码元的数目;n是每个码组的总位数,又称为码组长度(码长);n-k=r为每码组中的监督码元数目,或称监督位数目。通常,将分组码规定为具有如以下图所示的结构。图中前面k
15、位(an-Ia1)为信息位,后面附加个监督位(ar-ao)。图2-1分组码的结构在信道编码中,码组的重量就是码组中非零码元的数目,简称码重,例如OOIO码组的码重为1,OOll码组的码重为2。汉明(Hamming)距离就是两个码组中对应码位上具有不同二进制码元的位数定义为两码组的距离,简称码距。我们把某种编码中各个码组间距离的最小值称为最小码距,可记为min。在上述三位二进制码组例子中,8种码组均为许用码组时,两码组间的最小距离为1,常记作dnlin=1。在选四种码组为许用码组情况下,最小码距式中min=;采用两种许用码组时,4nin=3。由上例可知,-种编码的最小码距直接关系到这种码的检错和
16、纠错能力,码距实际上是由一种码组变成另一种码组必须变化的比特数。因此最小码距是信道编码的一个重要参数。在一般情况下,对于分组码有以下结论:为检测e个误码,要求该编码的最小码距i11+12.1-1)为纠正t个误码,要求该编码的最小码距in2r+12.1为纠正t个误码,同时检测e(et)个误码,要求最小码距in之+1(2.1-3J所渭纠正t个误码,同时检测e个误码,是指假设接收码组与某一许用码组间的距离在纠错能力范围t内,那么按前向纠错方式工作,自动将误码予以纠正;而当与任何许用码组间的距离都超过t时,那么按检错方式工作。也就是按纠检结合的方式工作。在简要讨论了编码的纠(检)错能力后,再来分析一下
17、过失控制编码的效用。假设在信道中传输“0和I的错误概率P相等,且pVVl,那么在码长为n位的码组中发生r位错码的概率(误码率)夕以NN0厂小/34例如,当码长n=7,P=l时,那么有可见,采用了过失控制编码,即使只能纠正(或检测)码组中的12个错0码,也可以使误码率下降几个数量级。这就说明,只能纠(检)12个错码的简单编码也有很大实用价值。事实上,常用的过失控制编码大多数也只能纠正(或检测)码组中的12个错码。2. 2模2运算原理模2运算是一种二进制算法,CRC校验技术中的核心局部,因此,我们在分析CRC算法之前,必须掌握模2运算的规那么。与四那么运算相同,模2运算也包括模2力口、模2减、模2
18、乘、模2除四种二进制运算。而且,模2运算也使用与四那么运算相同的运算符,即+表示模2加,“一表示模2减,X或“表示模2乘,子或/表示模2除。与四那么运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算。这样,两个二进制位相运算时,这两个位的值就能确定运算结果,不受前一次运算的影响,也不对下一次造成影响。模2加法运算定义为:0+0=0;0+1=1;1+0=1;1+1=0模2减法运算定义为:0-0=0;0-1=1;1-0=1;I-I=O模2乘法运算定义为:00=0;0l=0;1X0=0;1X1=1多位二进制模2乘法类似于普通意义上的多位二进
19、制乘法,不同之处在于后者累加中间结果(或称局部积)时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。模2除法运算定义为:0l=01l=l多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规那么。后者按带借位的二进制减法,根据余数减除数够减与否确定商1还是商0,假设够减那么商1,否那么商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义的。实际上,在CRC运算中,总能保证除数的首位为1,那么模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是I,按照模2除法运算法那么,那么余
20、数首位是1就商1,是0就商0。3. 3CRC分类在线性分组码中,有一种重要的码称为循环码(CyCIiCcode)。循环码是建立在严密的代数学理论根底上之上的。这种码的检纠)错能力较强,而且编码和解码设备都不太复杂。循环码除了具有线性码的一般性质外,还具有循环性。循环性是指任一码组循环移位以后,仍是该码中的一个码组。作为数据传输中过失控制的根本方法之一,循环冗余校验(CyclicRedundantCheck)已被广泛用于通信应用中。目前CRC的应用分为非标准和标准两种,己被国际标准化组织规定的标准生成多项式为标准,用户自定义的生成多项式为非标准,这也是目前广泛使用的几种。3.3 .1标准的CRC
21、在通信协议中常见并被广泛使用的标准列于表中。表2-2标准CRC多项式名称多项式简记应用CRC-4X4+%+10x13ITUG.704CRC-16X16+X15+x2+10x8005IBMSDLCCRC-CCIttX16+X12+10x1201ISOHDLC,ITUX.25,SD1.C.V.34/V.41/V.42.PPP-FCSCRC-32/+/+/+i6+/+yO+f+X+A+X+X+10x104C11DB7ZIP,RAR,IEEE8021.AN/FDDI,IEEE1394.PPP-FCSCRC-32C产+户+/+户+/+产+产+产+/+/+/+/+产+0+l0x11EDC6F41SCTP2
22、.3.2非标准的CRC非标准的CRC一般是为了某种用途而采用不同于标准的生成多项式,而实际的操作原理是相同的,主要用于需要CRC而需要低本钱的应用,或者为了减轻设计算机处理负担而又能够保证数据可靠性的折中方法,此外,局部的加密算法也是采用CRC来生成。3.4 循环码理论根底循环码属于分组码也记为(n,k),可分为线性循环码和非线性循环码两种。循环码仍是线性分组码,但另有循环移位不变特性。循环码的码字和多项式:设循环码的任一个码字为:在二元情况下,只取1或0,为了完整描述一个码字,需要知道?的取值及其在码字中的位置。用多项式来描述码字是很方便的,于是4-四-2ai.ai表示的码字用7次多项式来表
23、示,即:上式表示一个n位长的码字可以用一个x1次多项式来表示。可见多项式仅是码字的一个数学描述工具,但不是码字本身,但两者有一一对应的关系。如果a11-ian-244()改写为.-2-341()-1那么表示码字中码元循环左移-位,其对应的多项式相对于乘X:上式中采用了模多项式运算,说明码字的左移,相对于多项式乘x(升幕)后取亡+1的模剩余。同理左移i位相对于乘X:两多项式间一个常用的运算是加法,应为同嘉次项系数相加,在二元的情况下应做模2加,例如:那么:其中的一对V和1由于模2加消掉了,也可以认为做了减法。多项式另一个常用的运算是除法,可排竖式长除法。多项式:Ga)=解+寸+工+1列竖式做:可
24、见Cz(X)不能除尽c(力,故有余式d+X。如果将余式加到被除式G(X)即:2. 5循环码编码方法在编码时,首先要根据给定的(n,k)值选定生成多项式G(x),即从(父+1)的因子中选一个(n-k)次多项式作为G(X)。所有码多项式Ta)都可以被G(X)整除。根据这条原那么,就可以对给定的信息位进行编码:设M(X)为信息码多项式,其次数小于k。用一/乘M(X),得到/M(x)的次数必定小于n。用G(X)除/W),得到余式R(x),(H的次数必定小于G(X)的次数,即小于(-Q。将此余式R(X)加于信息位之后作为监督位,即将R(X)和a)相加,得到的多项式必定是一个码多项式.因为它必定能够被G(
25、X)整除,且商的次数不大于仅7)。根据上述原理,编码步骤如下:(1)用上*)乘M(力。(2)用G(X)除/儿,得到商Q(X)和余式A(X),即编出的码组T(X)为1 .5.1CRC产生操作过程以下是一个8位的数据0x02产生一个16位的CRC的过程。表2-3,8位数据0x02的16位CRC数据产生在图中我们可以看到,这个0x02数据被扩充到24位(原数据8位+16位CRC,缺乏的用零填充),然后再与0x8005(CRC-16生成多项式)做模2运算。在运算过程中,第17位总是被舍去(图中红色的位)。第16位如果是零,那么,只能与OXOOOO作异或运算,即数据左移一位。如果为1,那么就要与0x80
26、05作模2(异或)运算。每次运算完毕,丢弃最高位,然后将数据下一位移入,再进行模2(异或)运算,直到所有的位移完为止。2 -6循环码解码方法接收端解码的要求有两个:检错和纠错。由于任意一个码组多项式T(X)都应该能被生成多项式G(X)整除,所以在接收端可以讲接收的码组WX)用原生成多项式G(X)去除。当传输中未发生错误时,接收码组与发送码组相同,即RM=r(),故接收码组Rw必定能被G(X)整除:假设码组在传输中发生错误,那么R(X)T(X),W被G(X)除时可能除不尽而有余项,即有%产皿*%因此,我们就以余项是否为零来判别接收码组中有无错码。需要指出,有错码的接收码组也有可能被G(X)整除。
27、这时的错码就不能检出了。这种错误称为不可检错误。不可检错误中的误码数必定超过了这种编码的检错能力。3 .6.1CRC解码操作过程以前文0x02数据(CRC=0x80OF)为例,计算如下:表2-4,8位数据0x02的16位CRC数据校验当然,也可以使用比拟直观的方法,只对数据0x02求CRC值,如果等于接收到的CRC,那么也说明数据没有问题。第3章方案设计3.1 实现方案分析CRC算法可以用硬件实现,也可以用软件实现,硬件实现的方式电路结构复杂,使得应用系统功能模块增多,增大系统体积降低了集成度,批量生产的产品中提高了产品本钱;使用软件实现的方法计算的速度受限于系统CPU的速度,但是随着CPIJ
28、的集成度和运行速度的提高,这样的影响显得微缺乏道,所以采用软件实现的方法增加了系统集成度,从而提升系统的通信效率,在进行批量生产时可以极大的降低本钱。利用软件实现可以采用的器件有MCU和CPLD,基于MCU的方案中由于MCU的处理数据的位宽固定,且运行速度不如基于CPLD的方法快,基于CPLD的方案管脚配置更灵活,运行速度更快更稳定。故次设计中采用基于CPLD的软件实现方法来完成CRC的编解码校验。常用CRC软件实现方法是串行计算方法,使用一位数据输入,n位长度的原始数据连续计算n次后得出校验码,软件串行方式处理需要较多个CPU时钟周期,可以工作在较高的时钟频率下。但随着通信速度的不断提高,高
29、的数据传输带宽要求CRC的计算速度越来越快,串行计算的方法已经不适应要求,所以越来越多的使用并行计算方法。根据应用的需要,有两种常用的方法,来实现CRC的算法,查表法和逐位运算法,它们特点如下。3. 1.1查表法实现方案分析查表法,就是预先算好根本的CRC值,并存储于存储器中,需要时直接查询存储器中的CRC数据表,它是以字或字节为单位进行操作的,而不进行耗时的位运算。这样查表法的屈度就会增加,与基于位运算的方法相比在到达同等效果的时候就可以降低系统主频,从而使功耗大大降低,但这样的代价就是付出大容量的存储器。以一个8位的数据为例,作一次异或操作就能够完成着一个字节。表中的CRC值与其索引值有一
30、个一一对应的关系。8位数据的CRC查表法实现流程图如下:图3T查表法流程图3.1.2 逐位运算法实现方案分析逐位运算法,直接根据表2-3的原理实现的。数据每次移入一位时,就需要重新对每一位进行再次运算,因此:移位操作的次数=总的数据位数-16由此可以得出,当数据位数比拟多时,CPU使用的时间还是比拟多的,数据位数越多,就意味着使用更多的CPU机时,为了到达查表法同样的速度,就必须加倍的提高系统主频,由此会带来了功耗增加的问题。8位数据逐位运算法实现CRC的流程图如下:图3-2逐位运算法流程图3.1.3 现实需求分析CRC码校验根据第二章理论分析可知,实现CRC的根本原理,简单的说,就是原始数据
31、通过某种算法,得到一个新的数据,而这个新的数据与原数据有着固定的内在关系,通过把原数据和新数据组合在一起,形成新的数据,因此这个新数据具有自我检验的能力。然而,前面经验证的理论公式仅适用于理论模型,而实际中还需要考虑几个问题。首先要考虑CRC的数据位,不管M(X)有多长的数据位,总是希望有一个固定位数的R(*),以便在实现时可以节省很多资源。同时考虑到M(X)的数据位长度可能比CRC位数短,为了得到一个16位(或者32位)的数据长度,必须将原有数据扩展到16位以上,才能得到一个16位的余数。通常的做法是在M(X)的右边添加相应的CRC位数,例如16位那么需要增加16个数据位,32位需要增加32
32、个数据位。其次,规定CRC的最高位和最低位必须为1,由于标准的CRC是17位和32位,因此,如何在目前8位、16位、32位、64位等数据总线的计算机上实现通常是需要考虑的。在实际应用中,我们并不需要考虑这个最高的CRC位,因为它是总是被舍去,故只要考虑余下的16位(或者32位)就可以了。第三,商不需要,因此根本不要考虑。第四,除法运算没有数学上的含义,而是计算机中的模2算法,即每个数据位,与除数作逻辑异或运算,因此不存在进位或者借位问题。3. 2系统硬件设计本设计以CPLD为核心进行设计,通过需求分析本设计中所需外围电路主要有:控制器核心、电源模块、时钟模块、调试测试接口、复位及复位配置系统。
33、由于CPLD的I/O管脚的可配置性,在设计中必须考虑I/O管脚功能的分配,以便使系统设计中PCB布局布线简洁和操作方便。电源模块时钟系统复位系统图3-3系统框图3.2. 1电源模块电源模块工作原理,首先接入220V市电电源,经过变压器降压,然后经桥式整流器并通过滤波电容滤波得到纹波电压较小的直流电压,此电压输入稳压器7805后输出稳定的5V直流电压且纹波电压较小,5V电压输入低压差稳压器(LDO)AMSl117得到3.3V电压即可供系统使用。同时在此系统中增加了USB供电设计,在无外接电源的时候可采用USB供电。图3-4电源模块原理图3.2.2 时钟模块系统时钟模块犹如人的心脏汽车的发动机,系
34、统时钟的稳定性决定了系统工作的稳定性,且系统时钟频率越高系统运行速度越快,常用使用晶振有无源和有源,有源晶振具有稳定性高,且频率更高,应用更加简单。在本设计中采用有源晶振进行设计。图3-5时钟模块原理图3.2.3 调试测试接口程序设计完成需要下载到系统电路板上进行相应的调试,进行系统级的软硬件联合测试,只有通过软硬件联合测试的系统才是完整的系统,集成电路的集成度越来越高,如何进行测试显得极为重要。CPLD系统开发主要用JTAG进行程序的下载及测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO1分别为模式选择、时钟、数据输入和数据输出线。图3-6JTAG测试接口3.2.4 复位电路设
35、计复位就是将微机系统中的硬件逻辑恢复到一个初始确实定状态,复位是现代智能电子系统中不可缺少的组成局部,其与时钟系统具有同等重要的地位。因此在电子系统设计中系统复位必须合理的考虑和设计。CPLD的复位采用低电平复位口图3-7复位电路3. 3设计工具及开发流程进行基于VHDL语言的系统设计,主要需要掌握相关电子根底知识,具备一定程序设计根底,熟练应用基于WindOWS平台的开发软件。在本设计中主要应用Max+PlusII开发软件,以VHDL语言进行程序设计,通过MaX+PlusII完成编译及仿真验证。FPGA/CPLD 器件和电路系统第4章程序模块设计及仿真3.1 程序设计与仿真本设计完成12位信
36、息加5位CRC校验码发送、接收,由两个模块构成CRC校验生成模块(发送)和CRC校验检错模块(接收),其中CRC生成多项式采用+%2+,二进制表示为IloloL输入、输出都为并行的CRC校验生成方式。程序模块设计端U数据定义:图4TCRC编解码模块框图data:12位的待发送信息;elk:时钟信号;load:data的装载信号:error1:误码警告信号;datafini:数据接收校验完成;send、reception:生成、检错模块的握手信号,协调相互之间关系;decode_data:接收模块(检错模块)接收的12位有效信息数据;COded_data:附加上5位CRC校验码的17位CRC码,
37、在生成模块被发送,在接收模块被接收;4. 1.1编码模块设计与仿真根据前面的论述,用VHDL代码实现逐位运算的程序如下:process(elk)variablecrcvar:std_logic_vector(5downto0);beginif(clk,eventandelk=,)thenif(st=0andload=)thendtemp=data;sdatam=data;cnt,0);send=y0;st=1;elsif(st=Tandcnt7)thencnt=cntl;if(dtemp(ll)=,)thencrcvar:=dtemp(11downto6)xormulti_coef;dtemp
38、=crcvar(4downto0)&dtemp(5downto0)&0;elsedtemp=dtemp(10downto0)&0;endif;elsif(st=landcnt=7)thencoded_data=sdatam&dtemp(11downto7);Send=jcnt=cnt+l;elsif(st=landcnt=8)thensend=*0,;st=0,;endif;endif;endprocess;endhev;图4-2CRC生成模块5421IlOlOl多项式表示为:工+X十x+l多项式X五位二进制表示01000图4-3CRC生成模块仿真5. 1.2解码模块设计与仿真根据前面的论述,
39、程序校验采用CRC码中包含的数据信息位与生成多项式相除,将得到的结果与CRC码中的校验位作比拟,如果相等那么判为数据传输无误,反之判为数据传输错误,用VHDL代码实现运算的程序如下:process(elk,reception)variablererevar:stdlogicvector(5downto0);beginif(clk,eventandelk=,)thenif(rt=0andreception=*)thenrdtemp=coded_data(16DOWNTO5);rdatacrc=coded_data;rcnt,0,);errorl=,0,;rtandrcnt7)thendatafi
40、ni=,0;rcnt=rcnt+l;rerevar:=rdtem(11downto6)xormulti_coef;if(rdtemp(l1)=*)thenrdtemp=rcrcvar(4downto0)&rdtemp(5downto0)&0;elserdtem=rdtem(10downto0)&0;endif;elsif(rt=andrcnt=7)thendatafini=;decode_data=rdatacrc(16downto5);rt=0;if(rdatacrc(4downto0)=rdtemp(l1downto7)thenerrorl-,1endif;endif;endif;endp
41、rocess;endhev;解码功能模块图4-4CRC解码模块图4-5CRC解码仿真4. 1.3循环冗余码编码模块与解码模块联合运行模块联合连接示意图:图4-6CRC编解码模块连接联合仿真波形图:将CRC编码器与CRC解码器两个程序模块进行组合,编码和解码一次仿真中完成,从仿真波形整数据可以看出数据结果与两个模块单独工作时产生的数据相吻合,经过多组数据的验证,说明CRC编解码模块联合工作正常,数据结果正确可靠。图4-7CRC编解码联合仿真第5章结束语本文详细的介绍了循环冗余校验码的编解码器的根本理论和方法,通过仿真实验验证正确无误,方案切实可行。在进行本设计之初对CRC知之甚少,在设计的开始阶
42、段感到非常的迷茫,常常感觉无从下手,在大量查阅资料之后慢慢的找到了一点突破口,了解到设计循环冗余校验码需要深厚的理论根底,而且涉及的理论学科范围较广囊括了大学期间的多门重要根底课程。首先进行了CRC的理论学习,系统地对信息论根底做了学习,也再一次复习了通信原理、线性代数、数字电子技术、EDA技术。通过本次设计可以看出自己在根底理论知识方面上存在的薄弱环节,看到了自己理论联系实际的缺乏。通过本次设计增强了自己的动手能力,提高了自学能力。致谢大学生活即将告一段落,在四川理工学院学习的四年将是我终身难忘,母校对我的培养和各位老师的付出我不甚感谢,再此更要特别感谢我的导师陈彬老师,本设计的完成是在我们
43、的导师陈彬老师的细心指导下进行的。在每次设计遇到问题时老师不辞辛苦的讲解才使得我的设计顺利的进行。从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了陈老师很多的珍贵时间和精力,在此向导师表示衷心地感谢!导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!其次在此还要感谢我的室友,在设计中遇到问题我们互相学习,共同讨论,使我受益匪浅。总之,感谢每一位关心过我,保护过我的人。滴水之恩,当涌泉相报。最后,再次感谢我的导师陈彬老师。此外,我还要对在这次设计中,帮助和支持我的同学,表示感谢!此外,我还要对在这次设计中,帮助和支持我的同学,表示感谢!参考文献1樊昌信,曹丽娜通信
44、原理北京:国防工业出版社,20232李斗,殷悦,罗燕信息论与编码理论北京:电子工业出版社,20043廖海红,通信系统的CRC算法的研究和工程实现D北京:北京邮电大学信息工程学院,20064王新梅,肖国镇纠错码-原理与方法(修订版)西安:西安电子科技大学出版社,20015张宗槌纠错编码原理和应用北京:电子工业出版社,20036刘春阳基于FPGA的串行通信实现与CRC校验北京:北京化工大学,20067傅祖芸信息论-根底理论与应用北京:电子工业出版社,20018万哲先代数与编码北京:科学出版社,19809曹雪虹信息论与编玛北京:清华大学出版社,202310同济大学应用数学系线性代数北京:高等教育出版
45、社,202311徐秀娟线性代数北京:科学出版社,200712潘松,王国栋VHDL实用教程(第二版)【M】.成都:电子科技大学出版社,200113潘松EDA技术实用教程(第四版)M.北京:科学出版社,200514张宇,刘凤荣,杨瑞朋基于FPGA的CRC算法和VHDL设计郑州:防空兵指挥学院,202315井海明,高占凤用VHDL设计CRC发生揩和校验器石家庄:石家庄铁道学院,200416 BerrouC,GlavieuxA.TthitimajshimaP.NearShannonLimitErrorCorrectingCodingandDecodingiTurboCcxies.Proc.IEEEln
46、t.Conf.Commun.,1993:1064-107017 GallagerR,Low-densityParity-checkcodes,IRETrans.oIT,1962,8(1):21-2818 JohnG-Proakis-DigitalCommunicationsThirdEdition199519 1.uckyRW,SalzJ1Weldon1EJ-PrincipIesofDataCommunication5McGraw-HiIIJ968附录A程序代码CRC校验生成模块:1.IBRARYIEEE;USEIEEE.STD-LOGIC164.ALL;USEIEEE.STDLOGICUNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYCRCSENDISPORT(SDATA:INSTDLOGIC.VECTOR(11DOWNTOO);CLK1DATALD:INSTD_LOGI