循环冗余校验编码.docx

上传人:小飞机 文档编号:5285735 上传时间:2023-06-22 格式:DOCX 页数:19 大小:322.58KB
返回 下载 相关 举报
循环冗余校验编码.docx_第1页
第1页 / 共19页
循环冗余校验编码.docx_第2页
第2页 / 共19页
循环冗余校验编码.docx_第3页
第3页 / 共19页
循环冗余校验编码.docx_第4页
第4页 / 共19页
循环冗余校验编码.docx_第5页
第5页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《循环冗余校验编码.docx》由会员分享,可在线阅读,更多相关《循环冗余校验编码.docx(19页珍藏版)》请在三一办公上搜索。

1、老师课题:循环冗余校验编码(CRC)前言EDA (电子设计自动化)技术是现代电子工程领域的一门新技 术,它提供了基于计算机和信息技术的电路系统设计方法。EDA技 术的发展和推广应用极大地推动了电子工业的发展。随着EDA技术 的发展,硬件电子电路的设计几乎可以完全依靠计算机来完成,这样 就大大缩短了硬件电子电路设计的周期,从而使制造商可以快速开发 出品种多、批量小的产品,以满足市场的需求。EDA教学和产业界 的技术推广时当今世界的一个技术热点,EDA技术是现代电子行 业中不可缺少的一项技术。CRC (Cyclic Redundancy Check)循 环冗余校验码是常用的校验码,在早期的通信中运

2、用广泛,因为 早期的通信技术不够可靠(不可靠性的来源是通信技术决定的, 比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带 来确认信息的困惑,对通信的可靠性检查就需要校验,校验是 从数据本身进行检查,它依靠某种数学上约定的形式进行检查, 校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果 不可靠,就丢弃重发或者进行修复。目录一:实验目的肆二:实验内容肆三:实验步骤肆四:实验原理伍1. CRC校验码介绍伍2. 硬件电路的实现方法陆五:程序设计7六:专用周总结壹拾贰IBiIn一:实验目的1:学习CRC编码基本流程,学会调试循环冗余校验码编码程序。2:掌握CRC校验码的编码原理,重点掌握

3、按字节(Byte)编码方法。3:学习用FPGA设计一个数据通信中常用的数据检测模块循环冗余校验CRC模块,熟悉理解CRC的检测原理。二:实验内容本实验的内容是设计循环冗余校验CRC模块。利用Quartus2完成设计、仿 真等工作,最后在Smart SOPC实验箱上进行硬件测试和分析。通过KEY1-KEY3 输入信息,并显示于数码管13,接收到的数据显示于数码管46, CRC校验码 显示于数码管7/8。按KEY4加载要发送的信息,由LED2指示其状态;KEY5 为复位键,由LED1指示,数据接收状态由LED3 (完成)和LED4 (出错)指 示,数据的输入、输出显示等操作由本实验提供的一个测试模

4、块(crc5_test)完 成,用户可以自行分析该测试模块。这里主要介绍CRC模块的设计。三:实验步骤1:启动Q uartus2建立一个空白工程,然后命名为crc5.pqf。2:建立VerilogHDL源程序文件crc5.v.,写出程序代码并保存(完整的VerilogHDL 程序参考清单),进行综合编译。若在编译过程中发现错误,则找出并更正错直至编译成功为止。3:建立波形仿真文件并进行仿真验证,分析其运行最高时钟频率。4:将光盘中EDA_Component目录下的crc5_test. bsf、crc5_ test.v拷贝到工程目 录。5:自行设计按键及数码管显示程序然后编译直至没有发现错误。6

5、:选择目标器件并对相应的引脚进行锁定。7:将crc5_ top. bdf设置为顶层实体,对该工程文件进行全程编译处理。8 :硬件连接,下载程序。9:通过KEY1KEY5进行操作,观察数码管和发光二极管的状态,取几个数计 算验证。实验原理1.CRC校验码介绍IBiInCRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进 制码序列,以一定的规则产生一个校验用的监督码(CRC码)r位,并附在信息 后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端, 则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。 16位的CRC码产生的规则是先将要发送的二进

6、制序列数左移16位(乘以216) 后,再除以一个多项式,最后所得到的余数既是CRC码。求CRC码所采用模2 加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑 上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。接收方将接收到的二进制序列数(包括信息码和 CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输 有误。2、实现方法:CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校 验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。它的编码规则 是:1)、首先将原信息码(kb

7、it)左移r位(k+r=n)2)、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的 余数就是校验码生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个 系数仅为0和1取值的多项式一一对应。例如:代码1010111对应的多项 式为X6+X4+X2 + X+1,而多项式为X5+X3 + X2+X+1对应的代码101111。3硬件电路的实现方法多项式除法,可用除法电路来实现。除法电路的主体由一组移位寄存器和 模2加法器(异或单元)组成。以CRC-ITU为例,它由16级移位寄存器和3个加 法器组成,见下图(编码/解码共用)。编码、解码前将各寄存器初始化为1,信 息

8、位随着时钟移入。当信息位全部输入后,从寄存器组输出CRC结果。Hl5|l4|l3|l2|ll|-|l()| 9 | 8 | 7 | 6 | 5 | 4| 3 | 2 11 | 0比特输入一IBB五:程序设计/crc冗余码输入图2 用于计算CRC_ccrrr的移位寄存器的电路配置module zyz(clock,key,led,seg,dig);input clock;input4:0 key;output3:0led;output7:0seg;output7:0dig;wire11:0sdata;wire11:0rdata;wire4:0crc;wire dload;wire rst_n;re

9、g led2_r;reg led3_r;reg11:0sdata_r;reg11:0rdata_r;reg7:0seg_r;reg7:0dig_r;reg dload_r;reg16:0count;reg4:0dout1,dout2,dout3;reg4:0buff;reg2:0cnt3;reg3:0disp_dat;reg div_clk;wire4:0key_edge;wire16:0 datacrco;wire hsend;reg16:0 datacrci;reg hrecv;reg16:0 datacrco_r;reg hsend_r;reg16:0 dtemp;reg11:0 sdt

10、emp;reg16:0 rdatacrc;/*信号输出*/assign crc4:0=datacrco_r4:0;assign led2=led2_r;assign led3=led3_r;assign seg = seg_r;assign dig = dig_r;assign sdata = sdata_r;assign dload = dload_r;assign led1:0 = dload_r,rst_n;parameterpolynomial=6b110101;assign datacrco=datacrco_r;assign hsend=hsend_r;assign rdata=r

11、data_r;/*时钟分频部分*/always (posedge clock)beginif (count 17d120000)begincount = count + 1b1;div_clk = 1b0;endelsebegincount = 17d0;div_clk = 1b1;endend/*按键消抖部分*/always (posedge clock)beginif(div_clk)begindout1 = key;dout2 = dout1;dout3 = dout2;endendSIM sfii/*按键边沿检测部分*/always (posedge clock) beginbuff

12、= doutl I dout2 I dout3;end/*下降沿检测*/assign key_edge = (dout1 I dout2 I dout3) & buff;/*3位16进制数输出部分*/always (posedge clock)按键 1beginif(key_edge0)下降沿检测sdata_r11:8 = sdata_r11:8 + 1b1;endalways (posedge clock)按键 2beginif(key_edge1)下降沿检测sdata_r7:4 = sdata_r7:4 + 1b1;endalways (posedge clock)按键 3beginif(

13、key_edge2)下降沿检测sdata_r3:0 = sdata_r3:0 + 1b1;endalways (posedge clock)按键 4beginif(key_edge3)下降沿检测dload_r = dload_r;endassign rst_n = buff4;按键 5 always(posedge clock or negedge rst_n)beginif(!rst_n)beginhsend_r=1b0;datacrco_r=17d0;endelse if(dload=1b1)beginIBiIndtemp=sdata,5b00000;sdtemp=sdata;if(dte

14、mp16)dtemp16:11=dtemp16:11Apolynomial;if(dtemp15)dtemp15:10=dtemp15:10Apolynomial;if(dtemp14)dtemp14:9=dtemp14:9Apolynomial;if(dtemp13)dtemp13:8=dtemp13:8Apolynomial;if(dtemp12)dtemp12:7=dtemp12:7Apolynomial;if(dtemp11)dtemp11:6=dtemp11:6Apolynomial;if(dtemp10)dtemp10:5=dtemp10:5Apolynomial;if(dtemp

15、9)dtemp9:4=dtemp9:4Apolynomial;if(dtemp8)dtemp8:3=dtemp8:3Apolynomial;if(dtemp7)dtemp7:2=dtemp7:2Apolynomial;if(dtemp6)dtemp6:1=dtemp6:1Apolynomial;if(dtemp5)dtemp5:0=dtemp5:0Apolynomial;datacrco_r=sdtemp,dtemp4:0;hsend_r=1b1;end elsehsend_r=1b0;end always(posedge clock or negedge rst_n) beginif(!rs

16、t_n)beginrdata_r=12d0;led2_r=1b1;led3_r=1b1;endelse if(hsend=1b1)beginrdatacrc=datacrco_r;rdtemp=datacrco_r;if(rdtemp16)rdtemp16:11=rdtemp16:11Apolynomial;if(rdtemp15)rdtemp15:10=rdtemp15:10Apolynomial;if(rdtemp14)rdtemp14:9=rdtemp14:9Apolynomial;if(rdtemp13)rdtemp13:8=rdtemp13:8Apolynomial;if(rdtem

17、p12)rdtemp12:7=rdtemp12:7Apolynomial;if(rdtemp11)rdtemp11:6=rdtemp11:6Apolynomial;if(rdtemp10)rdtemp10:5=rdtemp10:5Apolynomial;if(rdtemp9)rdtemp9:4=rdtemp9:4Apolynomial;if(rdtemp8)rdtemp8:3=rdtemp8:3Apolynomial;if(rdtemp7)rdtemp7:2=rdtemp7:2Apolynomial;if(rdtemp6)rdtemp6:1=rdtemp6:1Apolynomial;if(rd

18、temp5:0Apolynomial)SIM sfiibeginrdata_r=rdatacrc16:5;led2_r=4b0;壹拾endelsebegin rdata_r=12d0; led3_r=1b0;endendelse led2_r=1b1;end/*数码管扫描显示部分*/always (posedge clock) beginif(div_clk)cnt3 = cnt3 + 1b1;endalways (posedge clock)beginif(div_clk)begincase(cnt3)3d0:disp_dat 3d1:disp_dat 3d2:disp_dat 3d3:di

19、sp_dat3d4:disp_dat 3d5:disp_dat 3d6:disp_dat 3d7:disp_datendcasecase(cnt3)3d0:dig_r = 8b01111111;3d1:dig_r = 8b10111111;3d2:dig_r = 8b11011111;3d3:dig_r = 8b11101111;3d4:dig_r = 8b11110111;3d5:dig_r = 8b11111011;3d6:dig_r = 8b11111101;3d7:dig_r = 8b11111110;endcaseendend定义上升沿触发进程=sdata_r11:8;=sdata_

20、r7:4;=sdata_r3:0;=rdata_r11:8;=rdata_r7:4;=rdata_r3:0;=3b0,crc4;=crc3:0;选择扫描显示数据/第一个数码管/第二个数码管/第三个数码管/第四个数码管/第五个数码管/第六个数码管/第七个数码管/第八个数码管选择数码管显示位选择第一个数码管显示选择第二个数码管显示选择第三个数码管显示选择第四个数码管显示选择第五个数码管显示选择第六个数码管显示选择第七个数码管显示选择第八个数码管显示IBiIn壹拾壹always (disp_dat) begindisp_dat)/七段译码4h0:seg_r = 8hc0;显示04h1:seg_r =

21、 8hf9;显示14h2:seg_r = 8ha4;显示24h3:seg_r = 8hb0;显示34h4:seg_r = 8h99;显示44h5:seg_r = 8h92;显示54h6:seg_r = 8h82;显示64h7:seg_r = 8hf8;显示74h8:seg_r = 8h80;显示84h9:seg_r = 8h90;显示94ha:seg_r = 8h88;显示a4hb:seg_r = 8h83;显示b4hc:seg_r = 8hc6;显示c4hd:seg_r = 8ha1;显示d4he:seg_r = 8h86;显示e4hf:seg_r = 8h8e;显示fendcase end Endmodule六:专用周总结L*、主要供工程学院的学弟学妹们参考。程序还是自己在看看哦/希望你们能学好这门课通信技术2011.3圃2百涔m一粤=F.JWOiEH/*壹拾贰通信技术七、参考资料1、王金明,数字系统设计与Verilog HDL,北京:电子工业出版,2010.72、周立功,EDA实验与实践,北京:北京航空航天大学出版社,2007.93、网4、程序源码搜索引擎 5、中国电子网 6、全球最大中文IT技术社区IBiIn壹拾叁

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号