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