基于FPGA的CRC校验设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数字电路课程设计》实验报告
题目:基于FPGA的CRC校验设计
班级:
学号:
姓名:
完成时间:
实验地点:
摘要
在通信的过程中,由于外界干扰或者电路本身不稳定因素的影响,通信系统中不可避免的会产生噪声(如热噪声等),噪声有时候会严重影响信息的发送,造成信息发送失败。因此在接收方确定自己是否接收到了正确的信息尤为重要。本文就CRC校验这一校验方法利用FPGA进行模拟仿真,完成整个CRC校验的过程。
目录第一章实验任务与原理
1.1实验任务
1.2 实验原理
第二章设计思路、方法及方案
2.1设计思路
2.2设计方法及方案
第三章FPGA模块设计
第四章系统调试及硬件检查
第五章结束语
附录程序源代码
第一章 实验任务与原理
1.1、 实验任务
本实验设计完成一个完整的CRC 校验过程,其中包括发送端对原始数据生成、编码、按照RS-232的传输协议组帧、接收端对RS-232传输帧格式解析和解码过程。
1.2、 实验原理
本次实验要完成整个CRC 校验过程,从产生数据到最后的校验完毕,因此实验原理共分为5个部分:数据源产生、CRC 编码、组帧、帧解析、CRC 校验。
图1 CRC 校验系统结构
1、 CRC 校验介绍
CRC (循环冗余校验码)是一种非常适于检错的信道编码。由于其检错能力
强,它对随机错误和突发错误都能以较低冗余度进行严格检验,且编码和译码检错电路的实现都相当简单,故在数据通信和移动通信中都得到了广泛的应用。
在数据通信与网络通信中,通常信息码元的数目k 相当大,由一千甚至数千
数据位构成一帧,而后采用循环码的生成多项式产生r 位的校验位。这时,信息码元和校验位构成的码字不一定是严格定义的循环码,而且主要是利用其误码检测特性进行错误检出,因此就可广泛采用CRC 码。它是从循环码中分出的一类检错码。循环码的已编码码字可被生成多项式g(x)整除。收端可以利用这一特点进行检错,若接收码字不能被g(x)整除,则有错。
2、实验原理介绍
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’或‘1’的多项式一一对应,例如‘1010111’对应的多项式为6421x x x x ++++。
CRC 码集选择的原则:若设码字长度为N ,信息字段长度为K ,校验字段
长度为R ,则N=K+R ;对于CRC 码集中的任一码字,存在且仅存在一个R 次多项式g(x)使得:
()()()()()R V x A x g x x m x r x ==+
其中m(x)为K 次信息多项式,r(x)为R-1次校验多项式,g(x)称为生成多项式。V(x)为发送的信息加码字多项式。
2012()...R R g x g g x g x g x =++++
发送方通过指定的g(x)产生CRC 码字,接收方则通过g(x)来验证CRC 码字,若传输码字多项式V(x)能除尽g(x),则传输正确。
第二章 设计思路、方法及方案
2.1设计思路
本实验采用如错误!未找到引用源。所示的结构实现CRC 的编解码。使用CRC-CCITT 标准进行仿真,其生成多项式为:
16125()1g x x x x =+++
以此多项式为基础,通过MODELSIM 对CRC 校验进行仿真。
2.2、设计方法及方案
为了完整仿真整个通信系统,实验将构造6大模块:数据源产生、CRC 编
码、组帧、噪声、帧解析、CRC 校验。
1) 数据源的产生
本次实验主要目的在于仿真CRC 校验的整体过程,因此在数据源产生
处就选择了最为简单的64位全为1的输入方式。
2) CRC 编码
本次实验使用CRC-CCITT 标准进行仿真,因此使用的生成多项式为
16125()1g x x x x =+++
因此在编码过程中计算余数时即用需要发送的信息除以生成多项式。如图2所示,用16个锁存器与3个异或门即能完成除法操作。可见,第1
位,5位,12位,16位(与第一位重合)上有异或门。在完成所有输入之后,16位锁存器中锁存的即为余数,在之后将其输出即可。在编码发送上,可见如图3所示,由使能din_dv 控制64位输入,同时,在此操作的一个时钟之后(由于输入数据赋值于输出数据需要一个时钟),计数器开始计数80位的输出位并以此来控制dout_dv 的使能端,因此可见得到一个由din 与crc 连接在一起的输出dout 。同时,设置一个清除信号clr,在当80位编码后信号输出的同时,清除信号置‘1’,清除触发器中的值。
图1 CRC 编码实现结构
1
63
64
78
79
din
crc
din
clk din dout_dv cnt_en cnt dout clr
din_dv
图3 CRC 编码时序图
3) CRC 组帧
如图4中frame 模块实现的是组帧功能,根据RS-232的组帧格式,在有效数据前加一比特起始位0,数据结束后加一比特停止位1,时序图如图5所示。即在接收端需要判断编码后的80比特的输出信号何时到达接收端,因此在组帧的时候将数据前加一比特起始位0,在接收端即可判断此‘0’即可开始接收。
01
79
80
din
din
clk din cnt_en cnt dout
din_dv 0
1
图4 frame 模块端口时序
4) 帧解析
帧解析就是在接收端首先完成的操作,它根据发送端发送的数据,检测到有效数据并开始接收。即在接收端,当检测到组帧时产生的信号‘0’以后,确定之后的信号为有效信号,开始接收,并且在计数器计数至80后,接收完毕。也就是如图5所示,当检测到‘0’之后,data_dv 使能端有效开始接收信息并开始计数,在之后一个时钟dout_dv 使能端有效并开始向下一级输出接收到的信号,并在80位以后由计数器控制停止。
1
79
din
din
clk din data_dv cnt dout
1
dout_dv
图5 receive 时序模块
5) 噪声
本次实验引入噪声只为验证CRC 校验的检错能力,因此并不需要特定地选取某些很特别的噪声,在此次实验中,加入噪声非常的简单,在接收端帧解析之后,即得到了80位的接收信号,此时对该信号任选几位将其与‘1’异或,其余位与‘0’异或(其原理为dout 与0异或仍为dout ,dout 与1异或为~dout ),因此即成功引入噪声。