基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx

上传人:b****5 文档编号:19706822 上传时间:2023-01-09 格式:DOCX 页数:14 大小:95.85KB
下载 相关 举报
基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx_第1页
第1页 / 共14页
基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx_第2页
第2页 / 共14页
基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx_第3页
第3页 / 共14页
基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx_第4页
第4页 / 共14页
基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx

《基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

基于VHDL的74汉明码编解码器的设计Word格式文档下载.docx

1.2VHDL简介

“VHDL设计”作为信息类专业新开出的一门重要的专业课,相对于传统课程具有内容新、发展快、应用性强等特点。

在硬件电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言则是EDA的关键技术之一。

第2章(7,4)汉明码的原理

2.1基本概念

线性分组码是一类重要的纠错码,应用很广泛。

在(n,k)分组码中,若

督元是按线性关系相加而得到的,则称其为线性分组码。

现在以(7,4)分组码为例来说明线性分组码的特点。

设其码字为A=[a6,a5,a4,a3,a2,a1,a0],其中前4位是信息元,后3位是监督元,可用下列线性方程组来描述该分组码,产生监督元:

a2=a6+a5+a4

a1=a6+a5 

+a3 

(2.1.1)

a0=a6 

+a4+a3

显然,这3个方程是线性无关的。

经计算可得(7,4)码的全部码字,如表2-1所示。

表2-1(7,4)码的全部码字

码 

信息码元

监督元

8

1

9

2

10

3

11

4

12

5

13

6

14

7

15

不难看出,上述(7,4)码的最小码距d0=3,它能纠1个错或检2个错。

汉明码是能够纠正单个错误的线性分组码,其特点是:

最小码距d0=3,码长n与监督位满足n=2r-1的关系,上述的(7,4)线性分组码就是一个汉明码。

2.2监督矩阵H

式(2.1.1)所示(7,4)汉明码的3个监督方程改写后可用矩阵形式表示为

a6

a5

1110100 

a4 

0

1101010 

·

a3 

(2.2.1)

1011001 

a2 

a1

a0

并简记为 

AT=0T或A·

HT=0 

(2.2.2)

H称为监督矩阵,一旦H给定,信息位和监督位之间的关系也就确定了。

H矩阵可以分成2部分

1110 

100

H= 

1101 

010 

=[PIr] 

(2.2.3)

1011 

001

AT=0T,可以用来作为判断接收码字A是否出错的依据。

2.3生成矩阵G

把监督方程补充完整并改写为矩阵形式

a6 

1000

a5 

0100

0010 

a3 

0001 

a5 

(2.3.1)

1110 

a4

a1 

a3

a0 

1011

A=[a6a5a4a3]·

(2.3.2)

其中

1000 

111

0100 

110

G= 

101 

(2.3.3)

0001 

011

G称为生成矩阵,由G和信息组就可以产生全部码字。

生成矩阵也可以分成2部分,即 

G=[Ik 

Q] 

(2.3.4)

其中 

Q= 

110 

=PT 

(2.3.5)

101

011

2.4伴随式(校正子)S

设发送码组A=[an—1,an—2,…,a1,a0],在传输过程中可能发生误码。

接收码组B=[bn—1,bn—2,…,b1,b0 

],收发码组之差定义为错误图样E,即

E=B-A 

(2.4.1)

令S=BHT,称为伴随式或校正子。

S=BHT=(A+E)HT 

=EHT 

(2.4.2)

上述(7,4)汉明码的伴随式与错误图样的对应关系如表2-2所示。

表2-2(7,4)汉明码S与E的对应关系

错误

码位

E

S

e6 

e5 

e4 

e3 

e2 

e1 

e0

s2 

s1 

s0

/

b0

1

b1

b2

b3

b4

b5

b6

第3章(7,4)汉明码编解码器的设计

3.1 

(7,4)汉明码的编码思路及程序设计

3.1.1(7,4)汉明码的编码思路

(7,4)汉明码的编码就是将输入的四位信息码编成七位的汉明码,即加入三位监督位。

根据式(2.3.2)A=[a6a5a4a3]·

G可知,信息码与生成矩阵G的乘积就是编好以后的(7,4)汉明码,而生成矩阵G又是已知的,由式(2.3.3)得

(3.1.1)

所以,可以得出如下方程组

a6=a6

a5= 

a5

a4= 

a3= 

(3.1.2)

a2=a6+a5+a4

a1=a6+a5 

+a3

a0=a6 

根据式(3.1.2)就可以编出编码程序了。

3.1.2(7,4)汉明码的编码程序设计

根据(7,4)汉明码的编码原理,首先画出程序设计的流程图:

图3.1编码流程图

输入信息码a3a2a1a0,输出(7,4)汉明码b6b5b4b3b2b1b0。

首先,输入信息码a3a2a1a0,即使用以下语句:

port(a:

instd_logic_vector(3downto0);

然后,根据式(3.1.2),就可以得到监督位与信息码之间的对应关系,使用异或运算,即:

b

(2)<

=a(3)xora

(2)xora

(1);

b

(1)<

=a(3)xora

(2)xora(0);

b(0)<

=a(3)xora

(1)xora(0);

最后,将算好的监督位与原来输入的信息码一起输出,这样,编码程序就算完成了。

3.2 

(7,4)汉明码的译码思路及程序设计

3.2.1(7,4)汉明码的译码思路

(7,4)汉明码的译码就是将输入的七位汉明码翻译成四位的信息码,并且纠正其中可能出现的一个错误。

由于生成矩阵G是已知的,所以根据式(2.3.4)G=[Ik 

Q],可以得到矩阵Q的值

111

(3.2.1)

那么 

P= 

(3.2.2)

而监督矩阵H与PT又存在一定的关系,即

H=[PIr] 

(3.2.3)

那么就可以算出监督矩阵H的值,即

1110100

1101010 

(3.2.4)

1011001

所以 

HT 

(3.2.5)

根据式(2.4.2)S=BHT=(A+E)HT 

=EHT可以看出校正子S与错误图样E之间有确定的线性变换关系。

而E=[en-1,en-2,…,e1,e0],这样就可以算出校正子S与(7,4)汉明码各位之间的关系,即

S2=a2+a6+a5+a4

S1=a1+a6+a5+a3 

(3.2.6)

S0=a0+a6+a4+a3

对照表2-2,就可以确定每一位出错时,对应的校正子s2s1s0的值。

这样,译码问题就迎刃而解了。

3.2.2(7,4)汉明码的译码程序设计

根据(7,4)汉明码的译码原理,首先画出程序设计的流程图:

图3.2.1译码流程图

首先,输入7位汉明码a6a5a4a3a2a1a0,用以下语句来实现:

instd_logic_vector(6downto0);

然后,根据这7位码a6a5a4a3a2a1a0,计算校正子s2s1s0的值,根据式(3.2.6)可知校正子S与(7,4)汉明码各位之间的关系,即:

ss

(2):

=a(6)xora(5)xora(4)xora

(2);

ss

(1):

=a(6)xora(5)xora(3)xora

(1);

ss(0):

=a(6)xora(4)xora(3)xora(0);

第三,要判定校正子与0的关系,使用if语句,若等于0,则表示没有错误;

若不为0,则表示其中有一位出错。

根据表2-2,可以得到校正子S与错误图样E之间的关系,才用case语句,编写程序如下:

when"

001"

=>

bb(0):

=notbb(0);

c<

="

000"

;

010"

bb

(1):

=notbb

(1);

100"

bb

(2):

=notbb

(2);

011"

bb(3):

=notbb(3);

101"

bb(4):

=notbb(4);

110"

bb(5):

=notbb(5);

111"

bb(6):

=notbb(6);

上述程序中,bb是变量,存放的是输入7位汉明码a6a5a4a3a2a1a0,

当S="

,时,表示a0出错,则只需将这一位的值取反,然后再送给输出。

a1、a2、a3、a4、a5、a6出错的原理也是一样的。

最后,将没有错误的(7,4)汉明码或已经纠正1个错误的(7,4)汉明码输出,这样译码程序就完成了。

为了方便阅读波形,加入输出了校正子S和错误位数C。

若第0位(a0)出错,则C输出0,依次类推;

若无错,则输出7。

第4章编译程序的调试与分析4.1 

(7,4)汉明码的编码程序调试与分析

4.1.1(7,4)汉明码的编码程序的编译

按照上述编码程序的编写思路,编写好程序,点击,进行编译,出现一些错误,如下:

Error1:

VHDLerroratym.vhd(3):

object"

std_logic_vector"

isusedbutnotdeclared

Error2:

VHDLerroratbm.vhd(7):

entity"

bm"

Error1表明在使用"

时,没有打开可以使用这个函数的库,应该在程序的最前面加上如下语句:

libraryieee;

useieee.std_logic_1164.all;

Error2表明程序中的文件名与保存时的文件名不一致,两者应该相同。

排除上述错误后,就可以进行波形仿真了。

4.1.2(7,4)汉明码的编码程序的仿真分析

建好波形文件,设置好输入信息码a3a2a1a0的初始值,点击,进行波形仿真,出现如下波形:

图4.1(7,4)汉明码的编码仿真波形

从波形中,可以看出输入信息0000~1111,对应的编码情况。

对照表2-1,可以确定(7,4)汉明码的编码程序完全正确,编码成功。

4.2 

(7,4)汉明码的编译码程序分析及调试

4.2.1(7,4)汉明码的译码程序的编译

按照上述译码程序的编写思路,编写好程序,点击,进行编译,出现一些错误,如下:

VHDLsyntaxerroratym.vhd(12)neartext"

variable"

expecting"

end"

or"

("

oranidentifier("

isareservedkeyword),orasequentialstatement,

VHDLCaseStatementerroratym.vhd(19):

CaseStatementchoicesmustcoverallpossiblevaluesofexpression

Error1表明"

变量定义的位置有误。

变量的定义一定要放在process(a)之后,begin之前。

Error2表明case语句使用有误。

使用case语句时,必须列出它的所有可能值,或者列出部分值,然后使用whenothers=>

语句即可。

改正上述错误,就可以对其进行波形仿真了。

4.2.2(7,4)汉明码的译码程序的仿真分析

建好波形文件,设置好输入(7,4)汉明码a6a5a4a3a2a1a0的初始值,点击,进行波形仿真,出现如下波形:

图4.2(7,4)汉明码的译码仿真波形1

由于设置的分别是a0、a1、a2、a3、a4、a5、a6出错,从波形上就可以清楚的看出该程序存在一定的问题,虽然没有语法错误,但存在着逻辑错误。

由波形可知:

a0出错时的校正子S为100,a1出错时的校正子S为010,

a2出错时的校正子S为001,a3出错时的校正子S为110,

a4出错时的校正子S为101,a5出错时的校正子S为011,

a6出错时的校正子S为111。

而根据表2-2可知:

a2出错时的校正子S为100,a3出错时的校正子S为011,

a4出错时的校正子S为101,a5出错时的校正子S为110,

由此可以推断是校正子S的高低位搞错了,仔细查看程序,发现的确是这个问题,改正后,编译仿真的以下波形:

图4.3(7,4)汉明码的译码仿真波形2

对照表2-2,仔细观察波形,可以确定波形没有问题,这样,(7,4)汉明码的译码程序就完全正确了,译码成功。

参考文献

[1]辛春艳.VHDL硬件描述语言[M].北京:

国防工业出版社,2002.

[2]侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:

西安电子科技大学出版社,2002。

[3]金西.VHDL与复杂数字系统设计[M].西安:

西安电子科技大学出版社,2003. 

体会与建议

为期一周的课程设计就这么结束了,忙碌而又辛劳,但是却让我学到了许多东西,为不久的将来走上工作岗位打下了一定的基础。

一开始老师给我们布置了题目——(7,4)汉明码的编解码器的设计。

拿到题目,我们非常着急,以为这个题目很难,象一只没头的苍蝇,我们开始乱钻,最后,一头扎进了图书馆,借了好几本书。

来仔细的翻看了通信原理的书和笔记,对(7,4)汉明码的一些基本概念有了进一

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

当前位置:首页 > 医药卫生 > 基础医学

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

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