74汉明码编码.docx

上传人:b****6 文档编号:15835805 上传时间:2023-07-08 格式:DOCX 页数:15 大小:86.12KB
下载 相关 举报
74汉明码编码.docx_第1页
第1页 / 共15页
74汉明码编码.docx_第2页
第2页 / 共15页
74汉明码编码.docx_第3页
第3页 / 共15页
74汉明码编码.docx_第4页
第4页 / 共15页
74汉明码编码.docx_第5页
第5页 / 共15页
74汉明码编码.docx_第6页
第6页 / 共15页
74汉明码编码.docx_第7页
第7页 / 共15页
74汉明码编码.docx_第8页
第8页 / 共15页
74汉明码编码.docx_第9页
第9页 / 共15页
74汉明码编码.docx_第10页
第10页 / 共15页
74汉明码编码.docx_第11页
第11页 / 共15页
74汉明码编码.docx_第12页
第12页 / 共15页
74汉明码编码.docx_第13页
第13页 / 共15页
74汉明码编码.docx_第14页
第14页 / 共15页
74汉明码编码.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

74汉明码编码.docx

《74汉明码编码.docx》由会员分享,可在线阅读,更多相关《74汉明码编码.docx(15页珍藏版)》请在冰点文库上搜索。

74汉明码编码.docx

74汉明码编码

摘要

EDA(ElectronicsDesignAutomation)技术是随着集成电路和计算机技术飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。

目前,VHDL语言已经成为EDA的关键技术之一,VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。

本文用VHDL语言实现了(7,4)汉明码的编码和译码,并通过实例来说明利用VHDL语言实现数字系统的过程。

在介绍(7,4)汉明码编码和译码原理的基础上,设计出了(7,4)汉明码的编码器和译码器,写出了基于VHDL实现的源程序,并通过QUARTUSⅡ软件进行仿真验证。

关键字:

VHDL;(7,4)汉明码

目录

引言……………………………………………………………………………1

1QuartusⅡ与VHDL简介…………………………………………1

1.1QuartusⅡ简介………………………………………………………………1

1.1VHDL简介……………………………………………………………………2

2设计原理……………………………………………………………………2

2.1m序列产生原理………………………………………………………………2

2.2(7,4)汉明码编码原理………………………………………………………3

2.3(7,4)汉明码译码原理………………………………………………………4

3(7,4)汉明码的建模与仿真………………………………………………4

3.1m序列发生器的建模与仿真……………………………………………………4

3.1.1VHDL设计程序………………………………………………………………5

3.1.2m序列电路符号……………………………………………………………6

3.1.3m序列仿真波形……………………………………………………………6

3.2(7,4)汉明码的编码建模与仿真………………………………………………6

3.2.1VHDL设计程序……………………………………………………………6

3.2.2编码部分电路符号…………………………………………………………7

3.2.3编码仿真波形…………………………………………………………7

3.3(7,4)汉明码的译码建模与仿真………………………………………………7

3.3.1VHDL设计程序……………………………………………………………7

3.3.2译码部分电路符号…………………………………………………………8

3.3.3译码仿真波形…………………………………………………………8

4小结……………………………………………………………………9

谢辞……………………………………………………………………………10

参考文献………………………………………………………………………11

 

引言

数字通信是以模拟通信为基础发展起来的,它已成为不可替代的现代通信技术,特别是近年来,随着FPGA/CPLD(现场可编程逻辑器件/复杂可编程逻辑器件)的出现和发展,对通信系统进行ASIC(专用集成电路)芯片的研究开始盛行,VHDL等硬件描述语言亿广泛应用于ASIC芯片的开发,这将为现代通信技术的发展做出重大贡献。

VHDL语言具有功能强大的语言结构,可用明确的代码描述复杂的控制逻辑设计,并且具有多层次的设计描述功能,支持设计库和可重复使用的元件的生成。

汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。

它属于线性分组码,由于汉明码的抗干扰能力较强,至今仍是应用比较广泛的一类码。

本文用VHDL语言实现了(7,4)汉明码的编码和译码,并通过实例来说明利用VHDL语言实现数字系统的过程。

在介绍(7,4)汉明码编码和译码原理的基础上,设计出了(7,4)汉明码的编码器和译码器,写出了基于VHDL实现的源程序,并通过QUARTUSⅡ软件进行仿真验证。

2设计原理

本次课程设计主要实现的是(7,4)汉明码的编码与译码,其中要编译的码字由m序列产生。

2.1m序列产生原理

二进制伪随机序列一般是通过移位寄存器加反馈电路共同来产生的。

这种反馈移位寄存器可分为线性反馈和非线性反馈移位寄存器两种。

其中,由线性反馈移位寄存器产生的周期最长的二进制数字序列叫做最大长度线性反馈移位寄存器序列,也称m序列。

m序列的性质主要表现为均衡性、游程特性、移位相加特性、相关特性等。

本次设计采用长度为15的m序列,由4级移位寄存器构成,特征多项式为

,其产生电路逻辑框图如图1所示。

四级移存器的所有可能状态为24=16种:

0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111。

中全0状态在m序列中是被禁止的。

在时钟脉冲的作用下移存器的状态不断变化,其状态变化图表如表1所示,D4为此m序列的输出,D1、D2、,D3是移存器的状态。

可以看出,从CP=0到CP=15是一个周期,在第15个时钟脉冲时移存器的状态又回到初始状态。

所以此m序列发生器的输出为111101011001010111101011001010……。

图115位m序列电路逻辑框图

表1状态变化图表

CP

D1D2D3D4

CP

D1D2D3D4

0

1111

8

1000

1

0111

9

1110

2

0011

10

0111

3

0001

11

0101

4

1000

12

0010

5

0100

13

1101

6

0010

14

1010

7

1001

15

1111

2.2(7,4)汉明码编码原理

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

在(n,k)分组码中,若监督元是按线性关系相加而得到的,则称其为线性分组码。

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

其主要参数如下:

码长:

信息位:

监督位:

,且

最小距离:

根据设计需要,本设计采用(7,4)汉明码。

其生成矩阵G和监督矩阵H如下:

 

系统码的编码结构非常简单,根据生成矩阵,输出码字可按下式计算:

 

所以有

信息位监督位

 

由以上关系可以得到(7,4)汉明码的全部码字如表2所示。

表2(7,4)汉明码的全部码字

序号

信息码元

监督元

序号

信息码元

监督元

0

0000

000

8

1000

111

1

0001

011

9

1001

100

2

0010

101

10

1010

010

3

0011

110

11

1011

001

4

0100

110

12

1100

001

5

0101

101

13

1101

010

6

0110

011

14

1110

100

7

0111

000

15

1111

111

2.3(7,4)汉明码译码原理

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

接收码组B=[bn—1,bn—2,…,b1,b0  ],收发码组之差定义为错误图样E,即 

由伴随式或校正子定义

 

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

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

错误

码位

E

S

e6  e5  e4  e3  e2  e1  e0

s2  s1  s0

/

0  0  0  0  0  0  0

0  0  0

b0

0  0  0  0  0  0  1

0  0  1

b1

0  0  0  0  0  1  0

0  1  0

b2

0  0  0  0  1  0  0

1  0  0

b3

0  0  0  1  0  0  0

0  1  1

b4

0  0  1  0  0  0  0

1  0  1

b5

0  1  0  0  0  0  0

1  1  0

b6

1  0  0  0  0  0  0

1  1  1

根据伴随式来确定可纠正的错误图样,在纠错部分通过异或运算来对对应位取反,完成译码。

3(7,4)汉明码的建模与仿真

3.1m序列发生器的建模与仿真

本文采用4级移存器产生的15位m序列,特征多项式为

,输出为1000111101*********……。

3.1.1VHDL设计程序

Libraryieee;

Useieee.std_logic_1164.all;

Entityps4is--实体名为“ps4”

Port(clk:

instd_logic;

Load:

instd_logic;

Q:

outstd_logic

);--定义实体接口

EndPS4;

Architecturebehaveofps4is

SignalC0,C1,C2,C3,C4:

std_logic;

Begin

Process(clk,load)--设置敏感信号

Begin

Ifclk'eventandclk='1'then

If(load='1')then--置初值

C3<='0';

C2<='0';

C1<='0';

C0<='1';

Q<=C3;

Else

C1<=C0;--移位

C2<=C1;

C3<=C2;

C0<=C3xorC0;--反馈连接

Q<=C3;

Endif;

Endif;

Endprocess;

Endbehave;

 

3.1.2m序列电路符号

图2电路符号

3.1.3m序列仿真波形

 

图3仿真波形

由于m序列禁止全0状态,因此添加了Load输入端,与反馈端经或运算后加至输入端。

在仿真开始时要先将in输入端设置在高电平,此时移存器的初始状态为1000,再将Load端置0,输入信号即可由反馈电路控制。

此时输出序列为111101011001010111101*********……。

3.2(7,4)汉明码的编码建模与仿真

根据(7,4)汉明码的生成矩阵,可以确定编码中输入的4路码元和输出的7路码元之间的关系。

3.2.1VHDL设计程序

libraryieee;

useieee.std_logic_1164.all;

entitybmis

port(a:

instd_logic_vector(3downto0);--4路并行输入

b:

outstd_logic_vector(6downto0));--7路并行输出

end;

architectureoneofbmis

begin

b(6)<=a(3);

b(5)<=a

(2);

b(4)<=a

(1);

b(3)<=a(0);

b

(2)<=a(3)xora

(2)xora

(1);--根据生成矩阵的逻辑进行编码

b

(1)<=a(3)xora

(2)xora(0);

b(0)<=a(3)xora

(1)xora(0);

end;

3.2.2编码部分电路符号

图4电路符号

3.3.3编码仿真波形

 

图5仿真波形

由于设计的15位m序列输出为111101011001010111101*********……,因此在这里就将编码输入设置为与m序列的输出相同,编码时将输入码元分组,每4位输入对应7位输出,利用生成矩阵可以计算出编码输出应为1111111,0101101……。

3.3(7,4)汉明码的译码建模与仿真

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

根据监督矩阵以及伴随式和可纠正错误图样的关系,可以完成(7,4)汉明码的译码。

3.3.1VHDL设计程序

libraryieee;

useieee.std_logic_1164.all;

entityymis

port(a:

instd_logic_vector(6downto0);--端口定义

s:

outstd_logic_vector(2downto0);

b:

outstd_logic_vector(3downto0);

c:

outstd_logic_vector(2downto0));

end;

architectureoneofymis

begin

process(a)

variabless:

std_logic_vector(2downto0);--定义中间变量

variablebb:

std_logic_vector(6downto0);

begin

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);

bb:

=a;

ifss>"000"then--判断S2S1S0的值是否为000

casessis

when"001"=>bb(0):

=notbb(0);c<="000";--根据校正子判断错误位并将错误位取反

when"010"=>bb

(1):

=notbb

(1);c<="001";

when"100"=>bb

(2):

=notbb

(2);c<="010";

when"011"=>bb(3):

=notbb(3);c<="011";

when"101"=>bb(4):

=notbb(4);c<="100";

when"110"=>bb(5):

=notbb(5);c<="101";

when"111"=>bb(6):

=notbb(6);c<="110";

whenothers=>null;c<="111";

endcase;

elseb<=a(6)&a(5)&a(4)&a(3);--校正子的值为000时[a6a5a4a3]为正确码字接收

endif;

s<=ss;

b<=bb(6)&bb(5)&bb(4)&bb(3);--校正子为其他值时将纠正后的正确码字送到接收端

endprocess;

End;

3.3.2译码部分电路符号

图6电路符号

3.3.3译码仿真波形

(1)无无码

 

图7无误码时的仿真波形

(2)有1位误码

 

图8有1位误码时的仿真波形

(3)有2位误码

 

图9有2位误码时的仿真波形

译码模块的输入为7个码元,输出为4个码元。

由三个仿真波形可以看出,当输入两组许用码组11111110101100时,输出为11110101,说明译码正确。

当两个码组均有一位错码(设第一个码组的第一位出错,第二个码组的第四位出错),输入变为01111110100101时,译码仍为11110101,说明译码正确。

当第一个码组出现2位错码,输入变为00111111111101时,译码输出为00111111,说明译码错误。

通过仿真我们验证了汉明码可以纠正一位随机错误。

4小结

本次课程设计的题目是用VHDL实现(7,4)汉明码的编码与译码,对通信系统进行编码与译码的作用是提高传输的可靠性。

本次设计主要用到的模块有m序列发生器,(7,4)汉明码的编码和(7,4)汉明码的译码。

整个设计通过硬件描述语言VHDL对各个模块进行编译、仿真,由m序列发生器产生m序列作为编码与译码的信源,通过这次的课程设计,我对VHDL语言有了新的认识,掌握了用VHDL语言编程的方法,并且能够熟练的运用它去编写各种各样的程序,它为以后能够从事这方面的工作提供了一定的基础。

在掌握VHDL语言的基础上,进一步理解了(7,4)汉明码的编解码原理以及一些重要的公式。

 

参考文献:

[1]段吉海.基于CPLD/FPGA的数字通信系统建模与设计[M].北京:

电子工业出版社,2004.

[2]江国强.EDA技术与应用[M].北京:

电子工业出版社,2004.

[3]夏雨闻.Verilog数字系统设计教程[M].北京:

北京航空航天大学出版社,2008.

[4]韦惠民.扩频通信技术及应用[M].西安:

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

[5]李国洪,胡辉,沈明山.EDA技术与实验[M].北京:

机械工业出版社,2008.

 

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

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2