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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

74汉明码课程设计.docx

1、74汉明码课程设计【摘要】本文主要介绍利用ALTERA公司的Quartus II软件实现(7,4)汉明码的编码和译码的设计,设计共分为三个模块:m序列产生与分组模块、编码模块、译码模块,实现m序列的分组输出。在QuartusII编辑环境下用VHDL文本输入的输入方法编制程序,经编译正确后进行波形仿真,调试,从而验证设计的正确性。关键字:汉明码,编码,译码,VHDL【Abstract】This article propose a method for Hamming encoder and Hamming decoder which is based on the VHDL language.

2、It introduces the theory of Hamming encoder and Hamming decoder and the source program based on VHDL, and the way simulated and checked through QuartusII.Throughout the whole design is totally divided into three modules: the m sequence generated and the Packet Module,the encoding module,the decoding

3、 Module.Keywords: Hamming, coder,encoder, decoder ,VHDL 第1章 问题的提出及方案论证1.1 问题的提出在上学期的通信原理课程中,我们学习了线性码的基本理论知识。通过学习,我们知道线性码是按照一组线性方程构成的。汉明(Hamming)码又是一种能够纠正一位错码效率较高的线性分组码。本次课程设计的任务就是利用EDA技术在Quartus II软件下用VHDL语言实现(7,4)汉明码的编译码设计和仿真。从而在实践过程中,加深对汉明码编译码原理的理解。1.2 方案论证1.2.1 Quartus II和VHDL简介 1. Quartus II 软件简

4、介 Quartus是Altera公司推出的CPLD/FPGA的开发工具,Quartus提供了完全集成且与电路结构无关的开发环境,具有数字逻辑设计的全部特性。Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。支持MA

5、X7000/MAX3000等乘积项器件 其中,Quartus II软件5.1支持可编程逻辑和结构化ASIC设计达到最佳效能的新特性包括:Stratix II GX器件支持:设计人员采用Quartus II软件5.1,现在可以开始进行Stratix II GX全系列产品设计。PowerPlay技术包:随着PowerPlay技术包的全面推出,Quartus II软件用户现在具备了业界可编程逻辑功耗分析和优化的最高级工具。与Quartus II软件5.0相比,5.1版的功耗优化特性平均降低了20的动态功耗,而Altera Stratix II器件则达到了60。此外,5.1版包括了新的功耗优化向导,完

6、善了Quartus II软件4.1引入的面积和性能优化向导,在优化Quartus II软件设计应用方面,为用户提供实时、循序渐进的帮助。渐进式设计流程:渐进式编译使设计人员能够将设计分为物理和逻辑分区,然后进行综合和适配。5.1版引入了渐进式编译自下而上的流程,每个工程师可以独立的开发和优化功能,然后轻松将其集成在一个完整的设计中。这种特性完善了年初引入的自上而下基于模块的流程,使设计人员在优化其他模块时,能够保留专用模块的性能不变。流行的IP模块:Altera订购包现在含有对部分流行MegaCore功能的全面许可,帮助设计人员缩短设计时间。此外,Quartus II软件网络版和订购版现在均包

7、括一套嵌入式外设已经同Nios II嵌入式处理器一起,分别进行了许可。外部逻辑分析仪接口:Quartus II设计人员不但可以使用SignalTap II嵌入式逻辑分析仪特性,还可以使用新的逻辑分析仪接口功能,在利用逻辑分析仪进行板级调试时,能够掌握内部FPGA节点的情况。2. VHDL语言简介VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,被IEEE和美国国防部确认为标准硬件描述语言。VHDL主要用于描述数字系统的结构,行为,功能和接口,除了含有许多具有硬件特征的语句外,VHDL的语言形式和描

8、述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点如下几点:(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大

9、规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。1.2.2 软件设计方案

10、介绍软件设计方案流程如下图所示 图 1-1 软件设计流程图4级m序列的最长周期为15,而(7,4)汉明码所需的数据位是4位,当一个周期的m序列一位一位移出,放入一个长度为4的数组,要分四次组,但还缺少一个数据,使得分组没有周期性,故在程序设计中进行第四次分组时,在数组的最低位补0,使其在一个m序列周期内正好分为4组。这样循环移位输出的m序列满足周期性,在观察波形时易于发现误码的现象,一目了然。分组后的一串数据即数组就进入下一级作为(7,4)编码器的信息位进行编码。在编码过程中加入监督位。这样,信息位和监督位就组成了七位码。经译码后便可输出汉明码的数据位以及译码的m序列。第2章 设计方案的实施2

11、.1 m序列模块2.1.1 m序列简介m序列是最长线性反馈移位寄存器序列的简称,它是由线性反馈的移存器产生的周期最长的序列。一般说来,一个n级反馈移位寄存器可能产生的最大周期等于(2n-1).现在我们引入m序列的本原多项式的概念。若一个n次多项式f(x)满足以下条件(1)f(x)为既约的;(2)f(x)可整除(xm+1),m=2n-1;(3)f(x)除不尽(xq+1),qm 。则f(x)为本原多项式。m序列通过线形反馈移位寄存器产生如图: 图 2-1 m序列产生原理框图设n级移位寄存器的初始状态:a-1 ,a-2,a-3,a-4,a-n经过一次移位后,状态变为a0,a1,a-n+1,经过n次移

12、位以后状态变为a-n-1,a-n-2,a1,a0。当n=4时,产生的m序列的长度为m=2n-1=15。我们可以取x4+x+1为本原多项式。2.1.2 m序列模块设计流程 m序列流程图:图2-2 m序列设计流程图在时钟信号触发下,4级m序列一位一位地移出,因为m序列的周期长度为15,(7,4)汉明码要求的信息位为4位,周期长度不能整除4,因而在m序列移出15位后在数组a中的最后一位添加一个“0”。这样一个周期的m序列就可以周期性的分成4组,易于观察分组码是否正确或波形图是否吻合。2.2 (7,4)汉明码知识介绍2.2.1基本概念线性分组码是一类重要的纠错码,应用很广泛。在(n,k)分组码中,若监

13、督码元是按线性关系模2相加而得到的,则称其为线性分组码。现在以(7,4)分组码为例来说明线性分组码的特点。设其码字为A=a6,a5,a4,a3,a2,a1,a0,其中前4位是信息码元,后3位是监督码元,可用下列线性方程组来描述该分组码产生监督元: 显然,这3个方程是线性无关的。根据公式2-1可得(7,4)码的全部码组,如表1所示。 表 2-1(7,4)汉明码的全部码组根据线性码封闭性,再由表1可知(7,4)码的最小码距d0=3,它能纠1个错或检测2个错。汉明码是能够纠正单个错误的线性分组码,其特点是:最小码距d0=3,码长n与监督位满足n=2r-1的关系,说明上述的(7,4)线性分组码就是一个

14、汉明码。由于码率k/n = (n - r) /n =1 r/n,故当n很大和r很小时,码率接近1。【1】可见,汉明码是一种高效码。2.2.2监督矩阵式(2-1)所示(7,4)汉明码的3个监督方程改写后可用矩阵形式表示为 简记为 HAT=0T 或 AHT=0 H称为监督矩阵,只要监督矩阵H给定,编码时信息位和监督位之间的关系就完全确定了。H的行数就是监督矩阵的数目,等于监督数目r。H序列可分为2部分:HAT=0T,可以用来作为判断接收码字A是否出错的依据。2.2.3生成矩阵把监督方程补充完整并改写为矩阵形式上式表示,在信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。Q的左边加上1个k k阶

15、单位方阵,就构成1个生成矩阵G 。而且可由G和信息组产生对应的全部码组。在得出的码组中,信息位的位置不变,监督位附加于其后。其中,Q PT。2.2.4 伴随式(校正子)S设发送码组A= an-1,an-2,a1,a0 ,在传输过程中可能发生误码。接收码组B= bn-1,bn-2,b1,b0 ,则发送码组和接收码组之差为错误图样E: B A = E (模2) 令S = BHT,称为伴随式或校正子。S = BHT =(A + E)HT = EHT,用来指示错码的位置。(7,4)汉明码的伴随式与错误图样的对应关系如表2所示。汉明码S与E的对应关系表 2-2 汉明码S与E的对应关系S1 S2 S3错码

16、位置S1 S2 S3错码位置001a0101a4010a1110a5100a2111a6011a3000无错码2.3 汉明码编码模块2.3.1汉明码编码原理汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。它属于线性分组码,由于汉明码的抗干扰能力较强,至今仍是应用比较广泛的一类码。在(n,k)汉明码中,(n-k)个附加的监督码元是由信息码元的线性运算产生的。码长为n,信息码元长度为k,2k个码组构成n维线性空间中的一个k维子空间,编码的实质就是要在n维空间中,找出一组长为n的k个线性无关的矢量g1g k-1 ,使得每个码组a都可以表示为k个矢量的线性组合,即a=an-1 an-2

17、a0= ak-1 g0+ ak-2 g1+ a0g k-1 其中,a i0,1,i=0,1, ,k-1。将上式写成矩阵形式得由此,an-1 an-2 a0是带编码信息的信息组,G是一个k*n阶矩阵,G称为(n,k)汉明码的生成矩阵。当G确定以后,编码的问题也就解决了。 根据监督码元是有信息码元的线性运算产生的关系可知,监督码(a0,a1,a2)满足以下关系式:即可算出三位监督位,再与信息位结合,可得到(7,4)汉明码2.3.2 汉明码编码程序设计流程 汉明码编码设计流程图图2-3 编码设计流程图输入信息码a3a2a1a0,输出(7,4)汉明码b6b5b4b3b2b1b0。首先,输入信息码a3a

18、2a1a0,即使用以下语句:port(a:in std_logic_vector(3 downto 0);就可以得到监督位与信息码之间的对应关系,使用异或运算,即:b(2)=a(3) xor a(2) xor a(1);b(1)=a(3) xor a(2) xor a(0);b(0)=n或2 r=k+r+1 (2-1)设(7,4)汉明码中,n=7,k=4,为了纠错一位码,由表达式2-1可知,要求监督位数r=3。用a6a5 a0表示要进行译码的码元,用S2、S1 和S0表示监督关系式的校正子,则S0、S1和S2的值与错码对应关系可以规定如表2-3所示,由表可知,当一位错码的位置在a2、a4、a5

19、或a6时,校正子为1;否则为0,可推知,a2,a4,a5或a6 4个码元构成偶数监督关系S2=a6a5a4a2 (2-2)同理可得S1=a6a5a3a1 (2-3)S0=a6a4a3a0 (2-4)接收到每个码组之后,先按照式2-22-4计算出S2,S1,S0,再按照表2-3判断错码情况。例如接收码组为0000011,可计算出S1=0,S2=1,S3=1。由于S1S2S3=011,可知a3位出错,只需对其取反即可表 2-3 (7,4)码校正子与错误图样的对应关系序号错误码位ESe6 e5 e4 e3 e2 e1 e0S0S1S201234567无错码a0a1a2a3a4a5a600000000

20、0000010000010000010000010000010000010000010000000000010101000111011101112.4.2汉明码译码程序设计流程汉明码译码设计流程图图 2-4 译码设计流程图首先,输入7位汉明码a6a5a4a3a2a1a0,用以下语句来实现:port(a:in std_logic_vector(6 downto 0);然后,根据这7位码a6a5a4a3a2a1a0,计算校正子s2s1s0的值,可知校正子S与(7,4)汉明码各位之间的关系,即:ss(2):=a(6) xor a(5) xor a(3) xor a(2);ss(1):=a(6) xo

21、r a(4) xor a(3) xor a(1);ss(0):=a(5) xor a(4) xor a(3) xor a(0);第三,要判定校正子与0的关系,使用if语句,若等于0,则表示没有错误;若不为0,则表示其中有一位出错。根据表4-1,可以得到校正子S与错误图样E之间的关系,才用case语句,编写程序如下:校正子 错码纠正 错码位置when 001 =bb(0):= not bb(0);nbb(1):= not bb(1);nbb(2):=not bb(2);nbb(3):=not bb(3);nbb(4):=not bb(4);nbb(5):=not bb(5);nbb(6):=no

22、t bb(6);n=110;上述程序中,bb是变量,存放的是输入7位汉明码a6a5a4a3a2a1a0,当S=001,时,表示a0出错,则只需将这一位的值取反,然后再送给输出。a1、a2、a3、a4、a5、a6出错的原理也是一样的。最后,将没有错误的(7,4)汉明码或已经纠正1个错误的(7,4)汉明码输出,这样译码程序就完成了。为了方便阅读波形,加入输出了校正子S和错误位数N。若第0位(a0)出错,则N输出0,依次类推;若无错,则输出7。第3章 软件调试及遇到的问题3.1 软件调试仿真波形图1 . m序列仿真波形图图3-1 m序列仿真波形图2. 汉明码编码仿真波形图图3-2 汉明码编码仿真波形

23、图3. 汉明码译码仿真波形图图3-3 汉明码译码仿真波形图4. 软件整体调试仿真波形图图3-4 软件整体测试仿真波形图3.2 软件调试过程中遇到的问题 在软件调试过程中主要遇到了以下问题: (1)毛刺干扰问题:相邻编码组之间存在毛刺干扰信号,可能是由于赋值语句的依次赋值顺延以及过程中的运算时延造成的。(2)延时问题:在m序列模块、编码模块中,存在一些延时现象,造成部分数据的丢失,为了尽可能减小延时,在编写程序时,尽量采用并行程序;在定义数据类型时,要选择变量,尽可能少地用信号类型,以减少程序运行时间;在传递参数时,尽可能用元件例化语句实现。(3)数据丢失以及时序配合问题:m序列分组时,要保证数

24、据不丢失以及时序配合,用计数器配合时钟来实现,当时钟上升沿到来时,计数器才进行相应动作,才将数据放入数组。(4)VHDL语法问题:在写整个程序的元件例化语句时,元件例化的参量的定义应与元件例化说明语句一致,注意变量与信号赋值方式的不同,实体定义的名字应该与文件名一致。在调试过程中也还遇到不少其他的问题,比如在生成总的电路图的过程中,如果没有新建工程,就有指示有错误。并且新建工程名必须与程序实体名保持一直,否则会报错:没有定义实体。第4章 总结体会 为期近两周的通信原理课程设计结束了,在这次课程设计中,也遇到了不少问题。由于对Quartus II 软件和 VHDL语言不太熟悉,所以开始一段时间的

25、主要精力就花在了这方面,通过借阅有关这方面的书籍和实际操作来熟悉他们。后期的主要工作便是程序设计调试,虽然问题不断,但在和同学的共同探讨下,最终基本完成了汉明码的编译码的设计。 通过这次课程设计,我加深了对汉明码编译码过程的了解。夯实了理论基础知识,也提高了实际运用方面的能力。在这个过程中,每当一个个小问题被解决时,对自己来说都是令人欣喜的,每一点小小的进步,都是对自己的肯定。这次课程设计是一次难忘的经历,让我从中学到了很多东西,将对我以后的学习工作有所帮助。附录:1.总电路图2. 程序清单 m序列:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IE

26、EE.STD_LOGIC_UNSIGNED.ALL;ENTITY m4 ISPORT(CLK,CLR:IN STD_LOGIC; DATAOUT1:out STD_LOGIC; DATAOUT16:OUT STD_LOGIC_vector(3 downto 0); END m4 ;ARCHITECTURE ART OF m4 ISsignal s1,s2:std_logic_vector(3 downto 0);signal s5:std_logic;begin process(clr,clk) is begin if clr=1 then s1=0001; elsif(clk=1 and c

27、lkevent) then s1=(s2(0) xor s2(3)&s2(3 downto 1); end if; s2=s1; s5=s2(0); end process;process (clk,s5)isbegin if(clkevent and clk=1)thenDATAOUT1=s5; -m序列输出end if;end process;process(clk,s5,clr)-实现分组以及数组补“0”variable temp:integer range 0 to 3;variable temp1:integer range 0 to 7;variable a:std_logic_v

28、ector(3 downto 0);begin if clr=1 then dataout16=0000; elsif rising_edge(clk) then if temp1a(3):=s5;temp:=1; when 1=a(2):=s5;temp:=2; when 2=a(1):=s5;temp:=3; when 3=a(0):=s5;temp:=0;temp1:=temp1+1;dataout16a(3):=s5;temp:=1; when 1=a(2):=s5;temp:=2; when 2=a(1):=s5;a(0):=0;temp:=0;temp1:=0;dataout16null; end case; end if;end if;end process;END ART; 编码:library ieee;use ieee.std_logic_1164.all;entity hamenc is port(datain:in bit_vector(0 to 3); hamout:out bit_vector(0 to 6);end hamenc;architecture ver2 of hamenc is signal p0,p1,p2:bit;begin p0 = (datain(0) XOR datain(1) XOR datain(2

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

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