CRC生成与校验的设计实现--计算机组成原理课程设计_第1页
CRC生成与校验的设计实现--计算机组成原理课程设计_第2页
CRC生成与校验的设计实现--计算机组成原理课程设计_第3页
CRC生成与校验的设计实现--计算机组成原理课程设计_第4页
CRC生成与校验的设计实现--计算机组成原理课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、沈阳航空航天大学课 程 设 计 报 告课程设计名称:计算机组成原理课程设计课程设计题目:CRC生成与校验的设计实现院(系):计算机学院专 业:计算机科学与技术班 级:学 号:姓 名:指导教师:说明:结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。报告和电子数据必须作为实验现象重复的关键依据。学术诚信声明 本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一

2、同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。 本人签名: 日期: 年 月 日课程设计总结: 一开始老师的要求要用modelsim进行仿真,不得不安装新的软件,各种尝试进行破解终于是能使用了。然后借Verilog HDL设计与实战学习verilog,发现和c语言很类似,从初步构思到一步步完善直到最后完成整个课程设计,让我更好的巩固了自己所学的知识。翻阅图书去学习一些没有接触过的知识让我更好的了解了这门课程,增强的实践动手能力。在老师和同学的帮助下,从编程到仿

3、真一步一步的去实现课设任务。 本学期开设的计算机组成原理课程,让我不但从概念上掌握了计算机内部的工作机制,并且能够学以致用,自主完成这次课程设计。虽然过程中有迷茫,但是作为一名合格的学生,我坚信我可以做到。在老师和同学的帮助下,我没有胆怯,一步步踏踏实实的完成老师分配的工作。不抛弃不放弃,坚持不懈,只有这样的态度,在面对无论是来自学习还是生活的困难,我们才能克服它们,完成自我的升华。指导教师评语:指导教师(签字): 年 月 日课程设计成绩目 录第1章 总体设计方案- 1 -1.1设计原理- 1 -1.2设计思路- 1 -1.3设计环境- 2 -第2章 详细设计方案- 4 -2.1 CRC码的生

4、成- 4 -2.2 CRC码的检测- 5 -第3章 调试与仿真- 6 -3.1 程序调试- 6 -3.2 程序测试及结果分析- 6 -参考文献- 9 -附 录(源代码)- 10 -沈阳航空航天大学课程设计报告 第1章 总体设计方案第1章 总体设计方案1.1 设计原理CRC码即循环冗余码,可以发现信息在存储或传送过程中连续出现的多为错误代码,在磁介质存储器和计算机之间的通信方面得到广泛应用。CRC码由k位数据D和r位校验码P组成,设被校验的数据是一个k位的二进制代码,将它表示为一个(k-1)阶的多项式: (1-1)将D左移r位的目的是给D右边添加r个0,形成(k+r)位长度二进制代码,其多项式形

5、式为M(x)。求校验码P的多项式R(X)的方法如下: (1-2)Q(x)是商,R(x)是余数,R(x)所对应的二进制代码是校验码P。可以证明存在一个最高次幂为n- k=r 的多项式G(x) ,称G(x)为生成多项式。由式(1-2)可以推导出 (1-3)由式(1-3)可知,CRC码可被G(x)整除,余数必然为0。接收方将收到的CRC码被G(x)除,若余数为0,则表明传送过程中没有错误发生;若余数不为0,则表明传送过程中有错误发生。1.2 设计思路课程设计的要求是数据位数为4位的二进制数,生成多项式G(x)也是4位的二进制数,故CRC码由4位信息码和3位校验码组成。输入的4位信息码和4位生成多项式

6、分别保存在inf和gx里,通过verilog编程进行模2除,可计算出最终的余数即为3位检验码,然后将信息码和检验码合在一起保存在outcrc中输出,得到的就是要求的CRC码。将outcrc中的数据与先前的gx进行模2除,最终得到的余数temp。在gx=1011时余数与发生错误的位数的关系如表1所示。表1 gx = 1011时的出错模式Q6Q5Q4Q3Q2Q1Q0余数出错位正确1100010000无错误1100011001Q01100000010Q11100110100Q21101010011Q31110010110Q41000010111Q50100010101Q61.3 设计环境在Quart

7、us II中用verilog编写程序得到电路图,再在modelsim中进行仿真。Quartus II 界面如图1所示。图1 Quartus II界面ModelSim仿真软件界面如图2所示。图2 ModelSim界面- 4 -沈阳航空航天大学课程设计报告 第2章 详细设计方案第2章 详细设计方案在quartus II中用verilog编程,用四位的对象inf保存输入的信息数据,四位的对象gx保存输入的生成多项式,七位的reg类型的对象outcrc保存要输出的crc码,四位的reg类型的对象temp保存再次模二除的被除数。2.1 CRC码的生成在always进程中,生成crc码时首先将4位的信息数

8、据inf直接赋值给crc码的4位高位;之后将inf值赋给temp作为第一次模二运算的被除数;如果被除数的最高位为1时,就将temp2与gx2做异或运算结果赋值给temp3,temp1与gx1异或赋给temp2,temp0与gx0异或赋给temp1,temp0直接赋值为0;如果被除数最高位为0时,就将temp2的值赋给temp3,temp1的值赋给temp2,temp0的值赋给temp1,temp0直接赋值为0;做四次这样的运算,结束循环;将最后一次的temp的高三位赋值给outcrc的低三位。此时的outcrc里的值就是要的crc码。具体的流程图如图3所示。 图3 CRC码生成2.2 CRC码

9、的检测检测crc码时,将outcrc的高四位值赋给temp作为第一次模二运算的被除数;之后的运算同crc码生成时计算最终的余数方法类似,只需要将temp的值做一下改变,若是最后一次循环就将temp0直接赋值为0,若不是最后一次循环,就将outcrci-4的值赋给temp0;循环四次后得到的temp的高三位就是最终的余数。因为最常用的生成多项式G(X)的值是1011,因此只对gx = 1011这一种情况做纠错。用case语句根据表1的内容将对应出错位数值取反就可的到正确的信息,resultchack的值为1表示一开始的crc码是正确的,为0表示一开始时不正确的。具体的流程图如图4所示。图4 CR

10、C码检测- 22 -沈阳航空航天大学课程设计报告 第3章 调试与仿真第3章 调试与仿真3.1 程序调试1、 编写的verilog程序在quartus II 中编译时出错。解决:根据错误提示发现在case语句中不应该是begin . end 而应该直接在case语句结束后加endcase。2、 在modelsim中仿真时,仿真图的outcrc及inf的值一直是不变的。解决:在crc的testbench文件里将开头的timescale 1 ps/ 1 ps改为timescale 1 ns/ 1 ps。3、生成的crc码与手工计算所得的值不一样。解决:将最终的余数也输出,与手工计算过程比较,发现输出

11、的余数是手工计算的倒数第二个余数,再检查发现是循环计算余数时循环次数少了一次。3.2 程序测试及结果分析如图5所示在检测信号为低电平时,只生成crc码outcrc,不检验,故resultcheck没有值。图5 检测信号低电平仿真图在inf为0001之前检测信号check为高电平时,生成的crc码outcrc是经过检测后的矫正后得到的值,故在inf为0001之前check会由原来的低电平变成成高电平。仿真图如图6所示。图6 检测信号高电平仿真图输入的inf信息的值从01101111仿真图如图7所示。图7 检测信号高电平仿真图在quartus II中运行编写的verilog程序,在task框中选择

12、Netlist Viewer文件夹双击RTL Viewer,得到如图8的电路图图8 CRC电路图沈阳航空航天大学课程设计报告 参考文献参考文献1 刘福奇.Verilog HDL设计与实战M.北京:北京航空航天大学出版社,2012.092 范延滨.微型计算机系统原理、接口与EDA设计技术M.北京:北京邮电大学出版社,20063 唐朔飞.计算机组成原理(第二版)M.北京:高等教育出版社,20084 白中英.计算机组成原理(第四版)M.北京:科学出版社,20095 胡越明.计算机组成与设计M.北京:科学出版社,20066 江国强.EAD技术习题与实验M.北京:电子工业出版社,2005沈阳航空航天大学

13、课程设计报告 附录(源代码)附 录(源代码)CRC源代码 module crc(inf,gx,check,outcrc,resultcheck);/(7,4)码生成input3:0 inf;/4位信息位input3:0 gx;/4位生成多项式input check;output6:0 outcrc;/7位生成码output resultcheck;reg6:0 outcrc;reg3:0 temp;reg resultcheck;integer i;always (inf)beginoutcrc6 = inf3;outcrc5 = inf2;outcrc4 = inf1;outcrc3 = i

14、nf0;temp3=inf3;temp2=inf2;temp1=inf1;temp0=inf0;/temp赋初值/*计算最终的余数*/for(i = 0;i2;i=i-1)beginif(temp3=1)/中间余数最高位为1时与gx异或begintemp3 = temp2gx2;temp2 = temp1gx1;temp1 = temp0gx0;if(i=3)temp0 = 1b0;elsetemp0 = outcrci-4;endelse/中间余数最高位为0时直接赋值begintemp3 = temp2;temp2 = temp1;temp1 = temp0;if(i=3)begintemp

15、0 = 1b0;endelsebegintemp0 = outcrci-4;endendendif(gx = 4b1011)begincase(temp3:1)3b000:;3b001:outcrc0 =outcrc0;3b010:outcrc1 =outcrc1; 3b011:outcrc3 =outcrc3;3b100:outcrc2 =outcrc2; 3b101:outcrc6 =outcrc6;3b110:outcrc4 =outcrc4; 3b111:outcrc5 =outcrc5; endcaseendif(temp = 4b0000)beginresultcheck = 1b

16、1;endelsebeginresultcheck = 1b0;endendend endmoduleCRC测试代码 timescale 1 ns/ 1 psmodule crc_vlg_tst();/ constants / general purpose registersreg eachvec;/ test vector input registersreg 3:0 gx;reg 3:0 inf;reg check;/ wires wire 6:0 outcrc;wire resultcheck;/ assign statements (if any) crc i1 (/ port ma

17、p - connection between master ports and signals/registers .gx(gx),.inf(inf),.check(check),.outcrc(outcrc),.resultcheck(resultcheck);initial begin / code that executes only once / insert code here - begin gx = 4b1011; inf = 4b0000; check = 1b0; / - end $display(Running testbench); end always / optional sensitivity list / (event1 or event2 or . eventn) begin / code executes for every event on sensitivity list / insert code here - begin gx = 4b1011; #1 inf = 4b0000;#1 inf = 4b0001;#1 ch

温馨提示

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

评论

0/150

提交评论