基于VHDL的CRC编解码设计说明_第1页
基于VHDL的CRC编解码设计说明_第2页
基于VHDL的CRC编解码设计说明_第3页
基于VHDL的CRC编解码设计说明_第4页
基于VHDL的CRC编解码设计说明_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./摘要循环冗余校验码是一种广泛应用检错编码,本设计以MaxPlusII为开发平台利用VHDL语言完成了CRC编解码设计。设计采用了模块化的方法,给出了CRC编解码的结构框图和部分仿真结果,结果表明该系统的设计方案正确。关键词:VHDL;循环冗余校验〔CRC;检错ABSTRACTCyclicredundancycheckcodeisawidelyusederrordetectioncode,thedesignoftheMaxPlusIIdevelopmentplatformforthecompletionoftheCRCusingVHDLlanguagecodecdesign.Designusesamodularapproach,giventhestructureofCRCdecodingblockdiagramandsomesimulationresults,theresultsshowthatthesystemisdesignedcorrectly.Keywords:VHDL;Cyclicredundancycheck<CRC>;Errordetection.目录摘要IABSTRACTII第1章引言11.1概述11.2容概要3第2章CRC编解码理论42.1纠错编码的基本原理42.2模2运算原理62.3CRC分类72.3.1标准的CRC82.3.2非标准的CRC82.4循环码理论基础82.5循环码编码方法102.5.1CRC产生操作过程112.6循环码解码方法112.6.1CRC解码操作过程12第3章方案设计133.1实现方案分析133.1.1查表法实现方案分析13逐位运算法实现方案分析143.1.3现实需求分析153.2系统硬件设计163.2.1电源模块173.2.2时钟模块173.2.3调试测试接口183.2.4复位电路设计183.3设计工具及开发流程19第4章程序模块设计及仿真204.1程序设计与仿真204.1.1编码模块设计与仿真214.1.2解码模块设计与仿真234.1.3循环冗余码编码模块与解码模块联合运行25第5章结束语27致28参考文献29附录A30附录B32.第1章引言1.1概述通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下无论采用何种方法,使用何种媒质,将信息从某方准确安全传送到另方。模拟通信是利用正弦波的幅度、频率或相位的变化,或者利用脉冲的幅度、宽度或位置变化来模拟原始信号,以达到通信的目的。模拟信息源模拟信息源调制器信道解调器受信者噪声源图1-1模拟通信系统模型数字通信是用数字信号作为载体来传输消息,或用数字信号对载波进行数字调制后再传输的通信方式。它可传输电报、数字数据等数字信号,也可传输经过数字化处理的语声和图像等模拟信号。信息源信息源信源编码加密信道编码数字调制信道数字解调信道译码解密信源译码受信者图1-2数字通信系统模型与模拟数据通信相比较,数字数据通信具有下列优点:数字技术的发展较模拟技术更快,数字设备通过集成电路很容易实现,并与计算机相结合,而由于超大规模集成电路技术的迅速发展,数字设备的体积与成本的下降速度大大超过模拟设备,性能价格比高;来自视频、声音和其他信息源的各类数据均可统一为数字信号的形式,并通过数字通信系统传输;在长距离数字通信中可以通过中继器放大和整形来保证数字信号的完整性而不累积噪音;以数据帧为单位传输数据,并通过检错编码和重发数据帧来发现与纠正通信错误,从而有效保证通信的可靠性;使用加密技术可有效增强通信的安全性;多路光纤技术的发展大大提高了数字通信的效率。"信息社会""信息经济"等名称越来越多的出现在我们的生活中,生活离不开信息,随着社会生产的发展,科学技术的进步,人们对传输信息的要求急剧增加.到了20世纪20年代,如何提高传递信息的能力和可靠性已成为普遍重视的课题,在传输过程中发生错误后能在收端自行发现或纠正的码。数字信号在传输过程中,由于受到干扰的影响,码元波形变坏。接收端收到后可能发生错误的判决。由于乘性干扰引起的码间串扰,可以采用均衡的办法纠正.而加性的影响则需要用其他的办法解决。在设计数字数字通信系统时,应该首先从合理选择调制制度,解调方法以及发生功率等方面考虑,使加性干扰不足以影响达到误码率的要求,在仍不能满足要,就要考虑采用查错控制措施了。一些通用的系统,其误码率要求因用途而异,也可以把查错控制作为附加手段,在需要时加用。从查错控制角度看,按照加性干扰引起的错码分布规律的不同,信道可以分为三类。即随机信道、突发信道和混合信道。在随机信道中,错码的出现是随机的,而且错码之间的统计是独立的。在突发信道中,错码是成串集中出现的,即在一些短促的时间段会出现大量错码,而在这些短促的时间段之间存在较长的无错码区间。查错控制技术主要有以下四种:检错重发:在发生码元序列中加入差错控制码元,接收端利用这些码元检测到有码元时,利用反相信道通知发送端,要求发送端重发,直到正确接收为止。所谓检测到有码错,是指在一组接收码元中知道有一个或一些错码,但是不知道该错码该如何纠正。采用检错重发技术时,通信系统需要有双向信道传送重发指令。前向纠错:前向纠错一般简称FEC〔ForwardErrorCorrection。这时接收端利用发送端在发送码元序列中加入的差错控制码元,不但能够发现错码,还能将错码恢复其正确取值。在二进制码元的情况下,能够确定错码的位置,就相当于能够就纠正错码。采用FEC是,不需要反相信道传送重发指令,也没有因反复重发而产生的时延,故实时性好。但是为了能够纠正错码,而不是仅仅检测到有错码,和检测重发相比,需要加入更多的差错控制码元。故设备要比检测重发设备复杂。反馈校验〔FeedCheckout:这时不需要在发送序列中加入差错控制码元。接收端将接收到的码元原封不动地转发回发送端。在发送端将它和原发送码元逐一比较。若发现有不同,就认为接收端收到的序列中有错码,发送端立即重发。这种技术的原理和设备都很简单。但是需要双向信道,传输效率也比较低,因为每个码元都需要占用两次传输时间。检错删除〔deletion:它和检错重发的区别在于,在接收端发现错误码后,立即将其删除,不要求重发。这种方法只适用在少数特定系统中,在那里发送码元中有大量多余度,删除不分接收码元不影响应用。循环码是线性分组码中最重要的一个子类,它的结构完全建立在有限域的基础上,可以用近似代数的方法精确描述,循环码是1957年由普兰奇<Prange>提出的,此后几十年中得到了充分的研究和发展。起初人们认识到并感兴趣的是循环码的外在特点,即循环码码字的循环移位后仍然是码字,这个特点给循环码的编译码实现带来了便利。在以后的实践中,人们从循环群的角度,在代数机构、纠错性能控制等方面找到了循环码更加吸引人的优越之处。目前,使用查错控制系统中使用的线性分组码几乎都是循环码或循环码的子类。循环冗余校验码〔CRC是一种系统的缩短循环码,广泛应用于帧校验。1.2容概要本设计主要分析循环冗余码理论,在理论基础上探讨其运用VHDL语言实现其算法,设计主要分为两个模块,即循环冗余码编码模块和循环冗余解码模块,主要编程工具为MaxPlusII。本设计主要容首先从了解循环冗余校验码的实际应用入手,然后分析纠错编码的基本原理,研究程序设计中的基本运算规则〔模2运算入手,深入分析循环冗余码的编解码理论及其工程实现算法。提出编解码方案并进行比较分析,选出符合本设计要求的实现方案,进行硬件设计,最后进行程序的模块化设计,并进行仿真验证,模块仿真验证无误进行模块组合调试仿真。分析仿真结果得出结论。第2章CRC编解码理论2.1纠错编码的基本原理信道编码是在被传送的信息中附加一些监督码元,来检错和纠错。下面以三位二进制码组为例,说明检错纠错的基本原理。三位二进制码元共有=8种可能的组合;000、001、010、011、100、101、110、111。下面分三种情况讨论〔l如果这8种码组都用于传送消息,即每个码组都是许用码组。在传输过程中若发生一个或多个误码,则一种码组会错误地变成另一种码组。这样的编码既不能检错,也不能纠错,完全没有抗干扰能力;

〔2若只选其中的000、011、101、110四种码组作为许用码组。除上述4种许用码组以外的另外4种码组001、010、100、111称为禁用码组。经观察我们可以发现,许用码组中"1"的个数为偶数个,禁用码组中"1"的个数为奇数个。如果在传输过程中发生了一位或三位的错码,则"1"的个数就变为奇数个,许用码组就变为禁用码组;接收端一旦发现这些禁用码组,就表明传输过程中发生了错误。用这种简单的校验关系可以发现一个和三个错误,但不能纠正错误。例如,当接收到的码组为010时,我们可以断定这是禁用码组,但无法判断原来的正确码组是哪个许用码组。虽然原发送码组为101的可能性很小〔因为发生三个误码的情况极少,但不能绝对排除;即使传输过程中只发生一个误码,也有三种可能的发送码组:000、011和110。显然,上述编码无法发现2个错码。以上编码方法相当于只传递00、01、10、11四种信息,而第三位是附加的监督位。这位附加的监督码位与前面两位信息码元和在一起,保证码组中"1"码的个数为偶数。下表示出了这种情况:表2-1信息位与监督位的关系信息位监督位晴000云011阴101雨110〔3如果进一步将许用码组限制为二种:000和111。则不难看出,用这种方法可以发现所有不超过2个的误码;或能纠正一位错码。纠正一位错码的方法是:将8个码组分成二个子集,其中{000、100、010、001}与许用码组000对应,{111、011、101、110}与许用码组111对应;这样,在接收端如果认为码组中仅有一个错码,只要收到第一子集中的码组即判为000,收到第二子集中的码组即判为111。例如,当收到的码组为禁用码组100时,如果认为该码组中仅有1个错码,则可判断此错码发生在"1"位,从而纠正为000;若认为上述接收码组中的错码数不超过两个,则存在两种可能性:000错一位和111错两位都可能变成100,因而只能检测出存在错码而无法纠正它。分组码一般用符号<n,k>表示,其中k是每个码组中二进信息码元的数目;n是每个码组的总位数,又称为码组长度<码长>;n-k=r为每码组中的监督码元数目,或称监督位数目。通常,将分组码规定为具有如下图所示的结构。图中前面k位<an-1…ar>为信息位,后面附加个监督位<ar-1…a0>。K个信息位K个信息位码长n=k+rr个监督位图2-1分组码的结构

在信道编码中,码组的重量就是码组中非零码元的数目,简称码重,例如0010码组的码重为1,0011码组的码重为2。汉明〔Hamming距离就是两个码组中对应码位上具有不同二进制码元的位数定义为两码组的距离,简称码距。我们把某种编码中各个码组间距离的最小值称为最小码距,可记为。在上述三位二进制码组例子中,8种码组均为许用码组时,两码组间的最小距离为1,常记作。在选四种码组为许用码组情况下,最小码距式中;采用两种许用码组时,。由上例可知,一种编码的最小码距直接关系到这种码的检错和纠错能力,码距实际上是由一种码组变成另一种码组必须变化的比特数。因此最小码距是信道编码的一个重要参数。在一般情况下,对于分组码有以下结论:①为检测e个误码,要求该编码的最小码距

〔2.1-1

②为纠正t个误码,要求该编码的最小码距

〔2.1-2

③为纠正t个误码,同时检测e〔e>t个误码,要求最小码距

〔2.1-3所谓"纠正t个误码,同时检测e个误码",是指若接收码组与某一许用码组间的距离在纠错能力围t,则按前向纠错方式工作,自动将误码予以纠正;而当与任何许用码组间的距离都超过t时,则按检错方式工作。也就是按"纠检结合的方式"工作。

在简要讨论了编码的纠〔检错能力后,再来分析一下差错控制编码的效用。

假设在信道中传输"0"和"l"的错误概率p相等,且p<<1,则在码长为n位的码组中发生r位错码的概率〔误码率为〔2.1-4例如,当码长n=7,时,则有可见,采用了差错控制编码,即使只能纠正〔或检测码组中的l~2个错0码,也可以使误码率下降几个数量级。这就表明,只能纠〔检1~2个错码的简单编码也有很大实用价值。事实上,常用的差错控制编码大多数也只能纠正〔或检测码组中的l~2个错码。2.2模2运算原理模2运算是一种二进制算法,CRC校验技术中的核心部分,因此,我们在分析CRC算法之前,必须掌握模2运算的规则。与四则运算相同,模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②模2减法运算定义为:0-0=0;0-1=1;1-0=1;1-1=0③模2乘法运算定义为:

0×0=0;0×1=0;1×0=0;1×1=1

多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果〔或称部分积时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。④模2除法运算定义为:

0÷1=01÷1=1

多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2除法运算法则,那么余数首位是1就商1,是0就商0。2.3CRC分类在线性分组码中,有一种重要的码称为循环码<cycliccode>。循环码是建立在严密的代数学理论基础上之上的。这种码的检〔纠错能力较强,而且编码和解码设备都不太复杂。循环码除了具有线性码的一般性质外,还具有循环性。循环性是指任一码组循环移位以后,仍是该码中的一个码组。作为数据传输中差错控制的基本方法之一,循环冗余校验〔CyclicRedundantCheck已被广泛用于通信应用中。目前CRC的应用分为非标准和标准两种,已被国际标准化组织规定的标准生成多项式为标准,用户自定义的生成多项式为非标准,这也是目前广泛使用的几种。2.3.1标准的CRC在通信协议中常见并被广泛使用的标准列于表中。表2-2标准CRC多项式名称多项式简记应用CRC-40x13ITUG.704CRC-160x8005IBMSDLCCRC-CCITT0x1201ISOHDLC,ITUX.25,SDLC,V.34/V.41/V.42,PPP-FCSCRC-320x104C11DB7ZIP,RAR,IEEE802LAN/FDDI,IEEE1394,PPP-FCSCRC-32C0x11EDC6F41SCTP2.3.2非标准的CRC非标准的CRC一般是为了某种用途而采用不同于标准的生成多项式,而实际的操作原理是相同的,主要用于需要CRC而需要低成本的应用,或者为了减轻设计算机处理负担而又能够保证数据可靠性的折中办法,此外,部分的加密算法也是采用CRC来生成。2.4循环码理论基础循环码属于分组码也记为<n,k>,可分为线性循环码和非线性循环码两种。循环码仍是线性分组码,但另有循环移位不变特性。循环码的码字和多项式:设循环码的任一个码字为:在二元情况下,只取1或0,为了完整描述一个码字,需要知道的取值及其在码字中的位置。用多项式来描述码字是很方便的,于是表示的码字用次多项式来表示,即:上式表示一个n位长的码字可以用一个次多项式来表示。可见多项式仅是码字的一个数学描述工具,但不是码字本身,但两者有一一对应的关系。如果改写为:则表示码字中码元循环左移一位,其对应的多项式相对于乘:上式中采用了模多项式运算,表明码字的左移,相对于多项式乘<升幂>后取的模剩余。同理左移位相对于乘。两多项式间一个常用的运算是加法,应为同幂次项系数相加,在二元的情况下应做模2加,例如:则:其中的一对和由于模2加消掉了,也可以认为做了减法。多项式另一个常用的运算是除法,可排竖式长除法。已知多项式:列竖式做:可见不能除尽,故有余式。如果将余式加到被除式即:2.5循环码编码方法在编码时,首先要根据给定的<n,k>值选定生成多项式,即从〔的因子中选一个〔n-k次多项式作为。所有码多项式都可以被整除。根据这条原则,就可以对给定的信息位进行编码:设为信息码多项式,其次数小于k。用乘,得到的次数必定小于n。用除,得到余式,的次数必定小于的次数,即小于。将此余式加于信息位之后作为监督位,即将和相加,得到的多项式必定是一个码多项式。因为它必定能够被整除,且商的次数不大于。根据上述原理,编码步骤如下:用乘。用除,得到商和余式,即编出的码组为2.5.1CRC产生操作过程以下是一个8位的数据0x02产生一个16位的CRC的过程。1234567891011121314151617181920212223240000001000000000000000000000000000000000000000010000000000000000000000000000000000100000000000000000000000000000000010000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000010000000000000000110000000000001010100000000000010101100000000000010101000000000001111800F表2-3,8位数据0x02的16位CRC数据产生在图中我们可以看到,这个0x02数据被扩充到24位〔原数据8位+16位CRC,不足的用零填充,然后再与0x8005〔CRC-16生成多项式做模2运算。在运算过程中,第17位总是被舍去〔图中红色的位。第16位如果是零,那么,只能与0x0000作异或运算,即数据左移一位。如果为1,那么就要与0x8005作模2〔异或运算。每次运算完毕,丢弃最高位,然后将数据下一位移入,再进行模2〔异或运算,直到所有的位移完为止。2.6循环码解码方法接收端解码的要求有两个:检错和纠错。由于任意一个码组多项式都应该能被生成多项式整除,所以在接收端可以讲接收的码组用原生成多项式去除。当传输中未发生错误时,接收码组与发送码组相同,即,故接收码组必定能被整除;若码组在传输中发生错误,则,被除时可能除不尽而有余项,即有因此,我们就以余项是否为零来判别接收码组中有无错码。需要指出,有错码的接收码组也有可能被整除。这时的错码就不能检出了。这种错误称为不可检错误。不可检错误中的误码数必定超过了这种编码的检错能力。2.6.1CRC解码操作过程以前文0x02数据<CRC=0x800F>为例,计算如下:12345678910111213141516171819202122232400000010100000000000111100000000000000000000000101000000000000000000000000000000001010000000000000000000000000000000101000000000000000000000000000000010100000000000100000000000000000001010000000000011000000000000000000101000000000001111100000000000010101100000000000010111000000000000101000000000000000000000表2-4,8位数据0x02的16位CRC数据校验当然,也可以使用比较直观的办法,只对数据0x02求CRC值,如果等于接收到的CRC,那么也说明数据没有问题。.第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数据表,它是以字或字节为单位进行操作的,而不进行耗时的位运算。这样查表法的速度就会增加,与基于位运算的方法相比在达到同等效果的时候就可以降低系统主频,从而使功耗大大降低,但这样的代价就是付出大容量的存储器。以一个8位的数据为例,作一次异或操作就能够完成着一个字节。表中的CRC值与其索引值有一个一一对应的关系。8位数据的CRC查表法实现流程图如下:CRC与表数据做异或运算运算结束吗?CRC与表数据做异或运算运算结束吗?CRC左移n位产生CRC表索引初始化CRC寄存器开始最后异或运算结束图3-1查表法流程图3.1.2逐位运算法实现方案分析逐位运算法,直接根据表2-3的原理实现的。数据每次移入一位时,就需要重新对每一位进行再次运算,因此:移位操作的次数=总的数据位数-16由此可以得出,当数据位数比较多时,CPU使用的时间还是比较多的,数据位数越多,就意味着使用更多的CPU机时,为了达到查表法同样的速度,就必须加倍的提高系统主频,由此会带来了功耗增加的问题。8位数据逐位运算法实现CRC的流程图如下:高位为1吗?高位为1吗?左移1位下一字节最高位移入异或运算最后异或运算结束运算结束吗?初始化CRC寄存器设定下一个字节开始左移1位下一字节最高位移入图3-2逐位运算法流程图3.1.3现实需求分析CRC码校验根据第二章理论分析可知,实现CRC的基本原理,简单的说,就是原始数据通过某种算法,得到一个新的数据,而这个新的数据与原数据有着固定的在关系,通过把原数据和新数据组合在一起,形成新的数据,因此这个新数据具有自我检验的能力。然而,前面经验证的理论公式仅适用于理论模型,而实际中还需要考虑几个问题。首先要考虑CRC的数据位,不管有多长的数据位,总是希望有一个固定位数的,以便在实现时可以节省很多资源。同时考虑到的数据位长度可能比CRC位数短,为了得到一个16位〔或者32位的数据长度,必须将原有数据扩展到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布局布线简洁和操作方便。CPLD核心CPLD核心复位系统时钟系统调试测试接口电源模块图3-3系统框图3.2.1电源模块电源模块工作原理,首先接入220V市电电源,经过变压器降压,然后经桥式整流器并通过滤波电容滤波得到纹波电压较小的直流电压,此电压输入稳压器7805后输出稳定的5V直流电压且纹波电压较小,5V电压输入低压差稳压器〔LDOAMS1117得到3.3V电压即可供系统使用。同时在此系统中增加了USB供电设计,在无外接电源的时候可采用USB供电。图3-4电源模块原理图3.2.2时钟模块系统时钟模块犹如人的心脏汽车的发动机,系统时钟的稳定性决定了系统工作的稳定性,且系统时钟频率越高系统运行速度越快,常用使用晶振有无源和有源,有源晶振具有稳定性高,且频率更高,应用更加简单。在本设计中采用有源晶振进行设计。图3-5时钟模块原理图3.2.3调试测试接口程序设计完成需要下载到系统电路板上进行相应的调试,进行系统级的软硬件联合测试,只有通过软硬件联合测试的系统才是完整的系统,集成电路的集成度越来越高,如何进行测试显得极为重要。CPLD系统开发主要用JTAG进行程序的下载及测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。图3-6JTAG测试接口3.2.4复位电路设计复位就是将微机系统中的硬件逻辑恢复到一个初始的确定状态,复位是现代智能电子系统中不可缺少的组成部分,其与时钟系统具有同等重要的地位。因此在电子系统设计中系统复位必须合理的考虑和设计。CPLD的复位采用低电平复位。图3-7复位电路3.3设计工具及开发流程进行基于VHDL语言的系统设计,主要需要掌握相关电子基础知识,具备一定程序设计基础,熟练应用基于Windows平台的开发软件。在本设计中主要应用Max+PlusII开发软件,以VHDL语言进行程序设计,通过Max+PlusII完成编译及仿真验证。原理图/VHDL文本编辑综合原理图/VHDL文本编辑综合时序与功能门级仿真FPGA/CPLD编程下载FPGA/CPLD器件和电路系统FPGA/CPLD适配第4章程序模块设计及仿真4.1程序设计与仿真本设计完成12位信息加5位CRC校验码发送、接收,由两个模块构成CRC校验生成模块<发送>和CRC校验检错模块<接收>,其中CRC生成多项式采用,二进制表示为110101。输入、输出都为并行的CRC校验生成方式。程序模块设计端口数据定义:CRC校验生成模块CRC校验生成模块datacoded_dataclkloadsendCRC校验校验模块coded_datadecode_dataclkreceptionerror1datafini图4-1CRC编解码模块框图data:12位的待发送信息;clk:时钟信号;load:data的装载信号;error1:误码警告信号;datafini:数据接收校验完成;send、reception:生成、检错模块的握手信号,协调相互之间关系;decode_data:接收模块<检错模块>接收的12位有效信息数据;coded_data:附加上5位CRC校验码的17位CRC码,在生成模块被发送,在接收模块被接收;4.1.1编码模块设计与仿真根据前面的论述,用VHDL代码实现逐位运算的程序如下:process<clk>variablecrcvar:std_logic_vector<5downto0>; begin if<clk'eventandclk='1'>thenif<st='0'andload='1'>then dtemp<=data;sdatam<=data;cnt<=<others=>'0'>; send<='0';st<='1'; elsif<st='1'andt<7>then cnt<=cnt+1; if<dtemp<11>='1'>then crcvar:=dtemp<11downto6>xormulti_coef; dtemp<=crcvar<4downto0>&dtemp<5downto0>&'0'; elsedtemp<=dtemp<10downto0>&'0'; endif; elsif<st='1'andt=7>then coded_data<=sdatam&dtemp<11downto7>; send<='1';cnt<=cnt+1; elsif<st='1'andt=8>then send<='0';st<='0'; endif; endif;endprocess;endhev;图4-2CRC生成模块仿真波形:添加激励信号clk时钟信号周期为10ns,数据装载load为1,输入数据data:1,激励信号添加完成按照软件设计进行仿真输出数据为,同时按照理论公式进行计算验证结果相同,CRC编码模块功能正常。1多项式表示为:110101多项式表示为:多项式五位二进制表示01000编码后的CRC编码:用信息多项式表示为图4-3CRC生成模块仿真4.1.2解码模块设计与仿真根据前面的论述,程序校验采用CRC码中包含的数据信息位与生成多项式相除,将得到的结果与CRC码中的校验位作比较,如果相等则判为数据传输无误,反之判为数据传输错误,用VHDL代码实现运算的程序如下:process<clk,reception>variablercrcvar:std_logic_vector<5downto0>;beginif<clk'eventandclk='1'>then if<rt='0'andreception='1'>then rdtemp<=coded_data<16DOWNTO5>;rdatacrc<=coded_data; rcnt<=<others=>'0'>; error1<='0';rt<='1'; elsif<rt='1'andrcnt<7>then datafini<='0';rcnt<=rcnt+1; rcrcvar:=rdtemp<11downto6>xormulti_coef; if<rdtemp<11>='1'>then rdtemp<=rcrcvar<4downto0>&rdtemp<5downto0>&'0'; else rdtemp<=rdtemp<10downto0>&'0'; endif; elsif<rt='1'andrcnt=7>thendatafini<='1';decode_data<=rdatacrc<16downto5>;rt<='0';if<rdatacrc<4downto0>/=rdtemp<11downto7>>then error1<='1'; endif; endif; endif;endprocess;endhev;解码功能模块图4-4CRC解码模块仿真波形:添加激励信号clk时钟信号周期为10ns,数据装载reception为1,输入数据coded_data:,激励信号添加完成,按照软件设计进行仿真输出数据decode_data为1,将解码器模块仿真数据与编码器仿真数据做对比,可以看出编码模块的输出数据coded_data输入解码模块后解码出的数据与编码器的输入数据相同,可以证明解码器模块功能能够准确实现。图4-5CRC解码仿真4.1.3循环冗余码编码模块与解码模块联合运行模块联合连接示意图:图4-6CRC编解码模块连接联合仿真波形图:将CRC编码器与CRC解码器两个程序模块进行组合,编码和解码一次仿真中完成,从仿真波形整数据可以看出数据结果与两个模块单独工作时产生的数据相吻合,经过多组数据的验证,表明CRC编解码模块联合工作正常,数据结果正确可靠。图4-7CRC编解码联合仿真.第5章结束语本文详细的介绍了循环冗余校验码的编解码器的基本理论和方法,通过仿真实验验证正确无误,方案切实可行。在进行本设计之初对CRC知之甚少,在设计的开始阶段感到非常的迷茫,常常感觉无从下手,在大量查阅资料之后慢慢的找到了一点突破口,了解到设计循环冗余校验码需要深厚的理论基础,而且涉及的理论学科围较广囊括了大学期间的多门重要基础课程。首先进行了CRC的理论学习,系统地对《信息论基础》做了学习,也再一次复习了《通信原理》、《线性代数》、《数字电子技术》、《EDA技术》。通过本次设计可以看出自己在基础理论知识方面上存在的薄弱环节,看到了自己理论联系实际的不足。通过本次设计增强了自己的动手能力,提高了自学能力。.致大学生活即将告一段落,在理工学院学习的四年将是我终身难忘,母校对我的培养和各位老师的付出我不甚感激,再此更要特别感我的导师彬老师,本设计的完成是在我们的导师彬老师的细心指导下进行的。在每次设计遇到问题时老师不辞辛苦的讲解才使得我的设计顺利的进行。从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了老师很多的宝贵时间和精力,在此向导师表示衷心地感!导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!其次在此还要感我的室友,在设计中遇到问题我们互相学习,共同讨论,使我受益匪浅。总之,感每一位关心过我,爱护过我的人。滴水之恩,当涌泉相报。最后,再次感我的导师彬老师。此外,我还要对在这次设计中,帮助和支持我的同学,表示感! 此外,我还要对在这次设计中,帮助和支持我的同学,表示感!参考文献[1]樊昌信,丽娜通信原理:国防工业,2009[2]斗,殷悦,罗燕信息论与编码理论:电子工业,2004[3]廖海红,通信系统的CRC算法的研究和工程实现[D]:邮电大学信息工程学院,2006[4]王新梅,肖国镇纠错码-原理与方法〔修订版:电子科技大学,2001[5]宗橙纠错编码原理和应用:电子工业,2003[6]春阳基于FPGA的串行通信实现与CRC校验:化工大学,2006[7]傅祖芸信息论-基础理论与应用:电子工业,2001[8]万哲先代数与编码:科学,1980[9]雪虹信息论与编码:清华大学,2009[10]同济大学应用数学系线性代数:高等教育,2008[11]徐秀娟线性代数:科学,2007[12]松,王国栋VHDL实用教程〔第二版[M].:电子科技大学,2001[13]松EDA技术实用教程〔第四版[M].:科学,2005[14]宇,凤荣,瑞朋基于FPGA的CRC算法和VHDL设计:防空兵指挥学院,2010[15]井海明,高占凤用VHDL设计CRC发生器和校验器:铁道学院,2004[16]BerrouC,GlavieuxA,TthitimajshimaP.NearShannonLimitErrorCorrectingCodingandDecoding:TurboCodes.Proc.IEEEInt.Conf.Commun.,1993:1064-1070[17]GallagerR,Low-densityParity-checkcodes,IRETrans.onIT,1962,8<1>:21-28[18]JohnG.Proakis.DigitalCommunications.ThirdEdition1995[19]LuckyRW,SalzJ,Weldon,EJ.PrinciplesofDataCommunication,McGraw-Hill,1968.附录A程序代码CRC校验生成模块:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYCRCSENDISPORT<SDATA:INSTD_LOGIC_VECTOR<11DOWNTO0>;CLK,DATALD:INSTD_LOGIC;DATACRCO:OUTSTD_LOGIC_VECTOR<16DOWNTO0>;HSEND:OUTSTD_LOGIC>;ENDCRCSEND;ARCHITECTURECOMMOFCRCSENDISCONSTANTMULTI_COEF:STD_LOGIC_VECTOR<5DOWNTO0>:="110101";SIGNAL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论