基于VHDL语言的汉明码编码/解码电路设计

摘要

摘 要:文章提出了一种基于VHDL语言的串行、并行转换及汉明码的编码和译码的实现方法。在介绍汉明码编码和译码原理的基础上,给出了基于VHDL实现的源程序,通过Quartus Ⅱ软件进行设计并利用FPGA开发板进行验证。

关键词:VHDL ;汉明码;串/并转换

Absrtact: This paper presents a method of serial and parallel conversion based on VHDL and the implementation of Hamming code coding and decoding. Based on the introduction of the coding and decoding principle of Hamming code, the source program based on VHDL is given, which is designed by Quartus II software and verified by FPGA development board.

Keywords: VHDL; Hamming code; Serial; Parallel 

1. 目录


2. 正文

2.1 系统设计

2.1.1 设计要求

已知(7,4)汉明码的编码和译码电路原理图如下,完成相应编码及译码模块的开发,实现串行比特流的编码和译码(输入和输出都是串行比特流)。

【图片】----------------------------------

2.1.2 系统设计方案

工作原理

汉明码是在原编码的基础上附加一部分码字,使其满足纠错码的条件。它属于线性分组码, 由于汉明码的抗干扰能力较强 ,至今仍是应用比较广泛的一类码。

在工程设计中常常涉及到信号传输,主流的方法有串行传输方法和并行传输方法,串行方法只有一根线,干扰少但传输速度慢。并行方案大大提升了传输速度,但传输距离短,易受干扰。故在实际的工程设计中常常要进行串、并转换。

本系统通过汉明码的编码与译码以及引入串并转换,展示了一种较为有效的自动纠错电路设计方案。

总体方案的论证与比较

有两种系统总体方案:

1. 引入时钟脉冲信号,数据自动输入,同时系统进行相应的编码\解码操作;

2. 手动输入数据,每传送4位数据系统进行一次编码\解码操作;

方案1增加了模块数量,但进行的操作数更少,系统稳定性更高;

方案2设计简单,但增加了操作的复杂程度;

综合考虑设计难度和操作的直观性,选择方案1。

各功能块的划分与组成

系统设计流程图如下图所示,串行数据进入串行转并行模块,被转换为4位并行数据,送入汉明码编码器。数据在汉明码编码器中生成7位编码数据,通过信道模块传输至汉明码解码模块。解码模块将7位数据解码纠错后输出4位解码数据。4位解码数据经由并行转串行模块后,转换为串行数据。

汉明码编码器输出4路未调制数据,信道模块输出7路编码信号,汉明码解码模块输出1路纠错指示标志,并行转串行模块输出1路输出信号

【图片】---------------------------------------

2.2 单元电路设计

2.2.1 时钟脉冲模块(1Hz)

本模块对FPGA芯片的内部时钟源进行分频,将50MHz时钟脉冲转换为50%占空比的1Hz脉冲。

其本质是一个计数器,每当计数器计数到25M时将输出信号进行翻转,从而输出50%占空比的1Hz脉冲。

2.2.2 串行转并行模块

本模块将串行数据转换为4位二进制并行数据,每送入4位串行数据刷新输出的4位并行数据。

其本质是一个4位移位寄存器,每送入一个并行数据,模块就将原来的数据进行左移,丢弃最高位,将新数据写入最低位。每当寄存器内被送入4位新数据,模块将寄存器内的数据读取并行输出。

模块结构图如图所示

【图片】

2.2.3 汉明码编码模块

本模块将4位并行数据进行汉明码编码,输出7位并行编码数据。

汉明码编码原理:XXXX

2.2.4 信道模块

本模块模拟7位并行数据信道,同时在每一路信道添加可调非门,模拟传输数据出错的情况。

模块结构图如图所示

【图片】

2.2.5 汉明码译码模块

本模块将7位并行数据进行汉明码译码,输出4位并行译码数据。

汉明码译码原理:本模块将4位并行数据进行汉明码编码,输出7位并行编码数据。

汉明码编码原理:

在(n, k)汉明码中, (n-k)个附加的监督码元是由信息码元的线性运算产生的。码长为n ,信息元长度为k , 2^k个码字构成n维线性空间中的一个k维子空间,编码的实质就是要在n维空间中, 找出一组长为n 的k 个线性无关的向量g0 g1 gk - 1 , 使得每个码字C都可以表示为k个向量的线性组合 , 即

C=[C_(n-1) C_(n-2)⋯C_0 ]=C_(k-1 ) g_0+C_(k-2 ) g_1+⋯+C_(0 ) g_(k-1)    (1)

其中, ci { 0 , 1} , i = 0 , 1 , ⋯ , k - 1 。将上式写成矩阵形式得

C=[■(■(C_(k-1 )&C_(k-2 ) )&⋯&C_(0 ) )][■(■(g_0@g_1 )@⋮@g_(k-1) )]=[■(■(C_(k-1 )&C_(k-2 ) )&C_(k-2 )&C_(0 ) )]  G  (2)

由此[■(■(C_(k-1 )&C_(k-2 ) )&⋯&C_(0 ) )]是带编码信息的信息组, G是一个n×k 阶矩阵,称为(n, k)汉明码的生成矩阵。

本系统中,采用7,4汉明码编码方式,由设计要求得生成矩阵

G=[■(1&1&■(1&0)@0&1&■(1&1)@1&1&■(0&1))]

当G确定以后,编码的问题也就解决了。

根据监督码元是有信息码元的线性运算产生的关系可知,监督码(a0,a1,a2)满足以下关系式:

{█(a_2=a_6 a_5 a_4@a_1=a_5 a_4 a_3@a_0=a_6 a_5 a_3 )┤

即可算出三位监督位,再与信息位(a6,a5,a4,a3)结合,可得到(7,4)汉明码。

2.2.6 并行转串行模块

本模块将4位二进制并行数据转换为串行数据依次输出

其本质是一个4位移位读取寄存器,每输入一个时钟脉冲信号,模块就将寄存器内数据读取标志位左移并读取对应位置寄存器内的数据,读取标志位从D0开始,读取4位后归零。

模块结构图如图所示

【图片】

2.2.7    显示模块

本模块将汉明码编码器输出的4路未调制数据信号,

信道模块输出的7路编码信号,

汉明码解码模块输出的1路纠错指示标志信号,

并行转串行模块输出的1路输出信号显示出来。

2.3 软件设计

2.3.1 设计平台、开发工具和实现方法

本系统利用EDA技术在Quartus II软件下用VHDL语言实现(7,4)汉明码的编译码及串/并行转换设计,并在基于Cyclone II EP2C5T144I8芯片的FPGA实验板上进行演示。

2.3.2 顶层设计图

本系统的顶层设计图如图所示

【图片】

2.3.3 程序清单

2.3.3.1 时钟脉冲模块(1Hz)


2.3.3.2 串行转并行模块


2.3.3.3 汉明码编码模块


2.3.3.4 信道模块


2.3.3.5 汉明码译码模块


2.3.3.6 并行转串行模块


2.3.3.7 四位并行信号转四路显示信号模块


2.3.3.8 数码管译码模块


2.4 系统测试

2.4.1 性能指标

实现串行,并行数据转换

实现数据检错与纠错,并指出错误位置

2.4.2 测试方法、步骤

在数据模块中输入想要输入的数据,调整信道模块连接方法(将任意一路非门接入信道);

烧录并接通电源,系统将在数码管前四位显示输入的并行信号,在第五位显示输出的一位并行信号,在第八位显示误码的位置,在LED灯1~7位显示汉明码编码后的七位数据;

按下按键K1,系统将复位,数据重新输入,重新显示系统输出及各项信息。

2.4.3 测试数据

假设输入数据为00001111循环,信道第4位接非门,则数码管前四位将循环显示0000=>1111=>0000=>...

第五位依次循环显示0,0,0,0,1,1,1,1,...

最后一位显示3(信道第4位)。

2.5 结论

本次设计实现了串行数据和并行数据间的相互转换,用汉明码编码/译码方法实现数据传输中的自动检错与纠错,使用顶层设计的方法进行了EDA程序设计与FPGA开发,完成了全部设计要求和扩展要求。

3. 参考文献

[1] 樊昌信 曹丽娜.通信原理(第6版)[M].国防工业出版社,2006.

[2] 刘爱莲.纠错编码原理及MATLAB实现[M].清华大学出版社:北京,2013.53-55.

[3 ] 金西. VHDL与复杂数字系统设计[M] .西安:西安电子科技大学出版社,2003. 81-115.

[4] 潘松 黄继业.EDA技术与VHDL[M].北京:清华大学出版社:北京,2005

4. 附录

https://pan.baidu.com/s/1k0MElRy7b9hk_unG2OJg7w

https://pan.baidu.com/s/1XYfZYUEKAnkA7eW566KU9g

你可能感兴趣的:(基于VHDL语言的汉明码编码/解码电路设计)