ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:803.36KB ,
资源ID:23118206      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23118206.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(循环冗余CRC模块设计.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

循环冗余CRC模块设计.docx

1、循环冗余CRC模块设计附表1:广州大学学生实验报告开课学院及实验室:物理与电子工程学院-电子楼317室 2016 年 5 月 26 日 学 院物 电年级、专业、班姓名Jason.P学号实验课程名称EDA技术实验成绩实验项目名称循环冗余(CRC)模块设计指 导 教 师一、 实验目的:设计一个在数字传输中常用的校验、纠错模块:循环冗余校验CRC模块,学习使用FPGA器件完成数据传输中的差错控制。二、 实验内容:1、实验原理:CRC即Cyclic Redundancy Check 循环冗余校验,是一种数字通信中的信道编码技术。经过CRC方式编码的串行发送序列码,可称为CRC码,共由两部分构成:k位有

2、效信息数据和r位CRC校验码。其中r位CRC校验码是通过k位有效信息序列被一个事先选择的r+1位“生成多项式”相“除”后得到(r位余数即是CRC校验码),这里的除法是“模2运算”。CRC校验码一般在有效信息发送时产生,拼接在有效信息后被发送;在接收端,CRC码用同样的生成多项式相除,除尽表示无误,弃掉r位CRC校验码,接收有效信息;反之,则表示传输出错,纠错或请求重发。本设计完成12位信息加5位CRC校验码发送、接收,由两个模块构成,CRC校验生成模块(发送)和CRC校验检错模块(接收),采用输入、输出都为并行的CRC校验生成方式。图10-1的CRC模块端口数据说明如下:图10-1 CRC模块

3、sdata:12位的待发送信息datald:sdata的装载信号datacrc:附加上5位CRC校验码的17位CRC码,在生成模块被发送,在接收模块被接收。clk:时钟信号rdata:接收模块(检错模块)接收的12位有效信息数据hsend、hrecv:生成、检错模块的握手信号,协调相互之间关系error:误码警告信号datafini:数据接收校验完成采用的CRC生成多项式为X5+X4+X2+1,校验码为5位,有效信息数据为12位。2、实验步骤:(1)编译以上示例文件,给出仿真波形。(2)建立一个新的设计,调入crcm模块,把其中的CRC校验生成模块和CRC校验查错模块连接在一起,协调工作。引出

4、必要的观察信号,锁定引脚,并在EDA实验系统上的FPGA目标器件中实现。三、 实验HDL描述:module sender(clk,sdata,datald,datacrc,hsend);input11:0 sdata;input clk,datald;output16:0 datacrc;output hsend;parameter D=6b110101;reg16:0 datacrc;parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8,s9=9;reg hsend;reg3:0 cs;reg11:0 data;always(posed

5、ge clk) if(datald) cs=s0; else case(cs) s0:begin cs=s1;data=sdata;datacrc16:5=sdata;hsend=0;end s1:begin cs=s2; if(data11=1) data=dataD; data=data1; end s2:begin cs=s3; if(data11=1) data=dataD; data=data1; end s3:begin cs=s4; if(data11=1) data=dataD; data=data1; end s4:begin cs=s5; if(data11=1) data

6、=dataD; data=data1; end s5:begin cs=s6; if(data11=1) data=dataD; data=data1; end s6:begin cs=s7; if(data11=1) data=dataD; data=data1; end s7:begin cs=s8; if(data11=1) data=dataD; data=data1; end s8:begin cs=s9; hsend=1; datacrc=datacrc16:5,data11:7; end s9:begin hsend=0; end endcaseendmodulemodule r

7、eceive(clk,rdata,datafini,datacrc,hrecv,error);input16:0 datacrc;input clk,hrecv;output11:0 rdata;output datafini,error;parameter D=6b110101;parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;reg datafini,error;reg 11:0 rdata;reg3:0 cs;reg11:0 data;always(posedge clk) if(hrecv) cs=s0;else case(c

8、s) s0:begin cs=s1;data=datacrc16:5;rdata11:0=datacrc16:5;error=0; datafini=0;end s1:begin cs=s2; if(data11=1) data=dataD; data=data1; end s2:begin cs=s3; if(data11=1) data=dataD; data=data1; end s3:begin cs=s4; if(data11=1) data=dataD; data=data1; end s4:begin cs=s5; if(data11=1) data=dataD; data=da

9、ta1; end s5:begin cs=s6; if(data11=1) data=dataD; data=data1; end s6:begin cs=s7; if(data11=1) data=dataD; data=data1; end s7:begin cs=s8; if(data11=1) data=dataD; data=data1; end s8:begin if (data11:7=datacrc4:0) error=0; else error=1; datafini=1; end endcaseendmodule电路原理图的顶层设计四、仿真结果:仿真时序图运行流程:data

10、ld为0时,生成、接收模块最终保持在s9、s8状态;当datald在一个时钟上升沿为1时,生成模块从s0运行至保持s9;其中生成模块s8状态的操作使联络信号置1,接收模块也将因此从s0运行至保持s9。上图初始时运行流程为:第1个时钟上升沿,datald信号置1,生成模块状态置为s0;此时接收模块状态为s0,执行状态操作(rdata取得数据为0,中间变量data取得数据为sdata);第2个时钟上升沿,生成模块处理状态s0时事件,此时数据输出口高12位为原始数据sdata;接收端在2-8时钟上升沿(s1-s7)生成校验码;第3-9个时钟上升沿,生成模块状态为s1-s7,生成校验码;第9个时钟上升

11、沿,接收模块状态为s8,提取接收的校验码,与自身生成的校验码比较,若不同则error为1,最后校验完成信号datafini置1,接收端停留在此状态,直至接收联络信号为1,回到s0状态;第10个时钟上升沿,生成模块状态为s8,将校验码并位至输出口低5位,并将联络信号置1;时钟上升沿时联络信号为0,接收模块保持状态s8,并执行相应操作;第11个时钟上升沿,生成模块状态为s9,将联络信号置0,无datald高电平将保持此状态;时钟上升沿时联络信号为1,接收模块状态置为s0;第12个时钟上升沿,接收模块状态为s0,执行操作为:rdata和中间变量data均取得带校验码的17位数据的高12位,即sdat

12、a,并清除datafini和error信号;第13-20个时钟上升沿,接收模块事件情况同第2-9个时钟上升沿;第21个时钟上升沿及之后,由于联络信号始终为0,接收模块保持状态s8。五、引脚锁定:六、硬件测试结果:下载程序到目标机图1图2图3注:采用模式1。由键4-键2设置待发送的数据并由数码管4-数码管2显示;数码管7-数码管5显示接收到的数据;LED-D8为error信号;LED-D7为datafini信号;键7控制datald信号,由硬件测试可以清晰的看到,当datald信号经过一次高低电平切换后,在数码管7-数码管5显示出接收到的数据和输入的数据一致。七、实验心得:通过本次实验使我明白了

13、循环冗余(CRC)校验实现的原理,同时也掌握了其Verilog HDL代码编写及原理图设计的方法。八、思考题:1. 如果输入数据、输出CRC码都是串行的,设计该如何实现(提示:采用LFSR)。答:通过线性反馈移位寄存器(LFSR)实现。 通过CRC的生成原理知道CRC的检验码生成是通过除法得到,由此联想到可以通过LFSR来产生校验码。 假设原信息码子多项式为 生成多项式为 那么CRC的码字为,使用用LFSR电路来进行实现,将M(x)向左移r位在电路中的意义即为输入完信息码后再输入r个0,所以在电路上的表现就如图所示。 将这个时刻产生的寄存器输入添加到原信息码的后边就进行完了CRC编码,同样接收端可以使用LFSR来进行CRC检验。2. 在程序中需要8个时钟周期才能完成一次CRC校验,试重新设计使得在一个clk周期内完成。答:将含状态机的两个大模块分解为多个串并联的小模块,每个模块处理时间为1个时钟周期,形成流水线结构。说明:各学院(实验中心)可根据实验课程的具体需要和要求自行设计和确定实验报告的内容要求和栏目,但表头格式按照“实验项目名称”栏以上部分统一。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1