循环冗余CRC模块设计说明.docx

上传人:b****3 文档编号:1764256 上传时间:2022-10-23 格式:DOCX 页数:9 大小:295.71KB
下载 相关 举报
循环冗余CRC模块设计说明.docx_第1页
第1页 / 共9页
循环冗余CRC模块设计说明.docx_第2页
第2页 / 共9页
循环冗余CRC模块设计说明.docx_第3页
第3页 / 共9页
循环冗余CRC模块设计说明.docx_第4页
第4页 / 共9页
循环冗余CRC模块设计说明.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

循环冗余CRC模块设计说明.docx

《循环冗余CRC模块设计说明.docx》由会员分享,可在线阅读,更多相关《循环冗余CRC模块设计说明.docx(9页珍藏版)》请在冰豆网上搜索。

循环冗余CRC模块设计说明.docx

循环冗余循环冗余CRC模块设计说明模块设计说明附表1:

广州大学学生实验报告开课学院及实验室:

物理与电子工程学院-电子楼317室2016年5月26日学院物电年级、专业、班姓名Jason.P学号实验课程名称EDA技术实验成绩实验项目名称循环冗余(CRC)模块设计指导教师一、实验目的:

设计一个在数字传输中常用的校验、纠错模块:

循环冗余校验CRC模块,学习使用FPGA器件完成数据传输中的差错控制。

二、实验内容:

1、实验原理:

CRC即CyclicRedundancyCheck循环冗余校验,是一种数字通信中的信道编码技术。

经过CRC方式编码的串行发送序列码,可称为CRC码,共由两部分构成:

k位有效信息数据和r位CRC校验码。

其中r位CRC校验码是通过k位有效信息序列被一个事先选择的r+1位“生成多项式”相“除”后得到(r位余数即是CRC校验码),这里的除法是“模2运算”。

CRC校验码一般在有效信息发送时产生,拼接在有效信息后被发送;在接收端,CRC码用同样的生成多项式相除,除尽表示无误,弃掉r位CRC校验码,接收有效信息;反之,则表示传输出错,纠错或请求重发。

本设计完成12位信息加5位CRC校验码发送、接收,由两个模块构成,CRC校验生成模块(发送)和CRC校验检错模块(接收),采用输入、输出都为并行的CRC校验生成方式。

图10-1的CRC模块端口数据说明如下:

图10-1CRC模块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校验查错模块连接在一起,协调工作。

引出必要的观察信号,锁定引脚,并在EDA实验系统上的FPGA目标器件中实现。

三、实验HDL描述:

modulesender(clk,sdata,datald,datacrc,hsend);input11:

0sdata;inputclk,datald;output16:

0datacrc;outputhsend;parameterD=6b110101;reg16:

0datacrc;parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8,s9=9;reghsend;reg3:

0cs;reg11:

0data;always(posedgeclk)if(datald)cs=s0;elsecase(cs)s0:

begincs=s1;data=sdata;datacrc16:

5=sdata;hsend=0;ends1:

begincs=s2;if(data11=1)data=dataD;data=data1;ends2:

begincs=s3;if(data11=1)data=dataD;data=data1;ends3:

begincs=s4;if(data11=1)data=dataD;data=data1;ends4:

begincs=s5;if(data11=1)data=dataD;data=data1;ends5:

begincs=s6;if(data11=1)data=dataD;data=data1;ends6:

begincs=s7;if(data11=1)data=dataD;data=data1;ends7:

begincs=s8;if(data11=1)data=dataD;data=data1;ends8:

begincs=s9;hsend=1;datacrc=datacrc16:

5,data11:

7;ends9:

beginhsend=0;endendcaseendmodulemodulereceive(clk,rdata,datafini,datacrc,hrecv,error);input16:

0datacrc;inputclk,hrecv;output11:

0rdata;outputdatafini,error;parameterD=6b110101;parameters0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;regdatafini,error;reg11:

0rdata;reg3:

0cs;reg11:

0data;always(posedgeclk)if(hrecv)cs=s0;elsecase(cs)s0:

begincs=s1;data=datacrc16:

5;rdata11:

0=datacrc16:

5;error=0;datafini=0;ends1:

begincs=s2;if(data11=1)data=dataD;data=data1;ends2:

begincs=s3;if(data11=1)data=dataD;data=data1;ends3:

begincs=s4;if(data11=1)data=dataD;data=data1;ends4:

begincs=s5;if(data11=1)data=dataD;data=data1;ends5:

begincs=s6;if(data11=1)data=dataD;data=data1;ends6:

begincs=s7;if(data11=1)data=dataD;data=data1;ends7:

begincs=s8;if(data11=1)data=dataD;data=data1;ends8:

beginif(data11:

7=datacrc4:

0)error=0;elseerror=1;datafini=1;endendcaseendmodule电路原理图的顶层设计四、仿真结果:

仿真时序图运行流程:

datald为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个时钟上升沿,接收模块状态为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位,即sdata,并清除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显示出接收到的数据和输入的数据一致。

七、实验心得:

通过本次实验使我明白了循环冗余(CRC)校验实现的原理,同时也掌握了其VerilogHDL代码编写及原理图设计的方法。

八、思考题:

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