DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1241|回复: 0
打印 上一主题 下一主题

[待整理] CPLD/FPGA在数字通信系统的应用

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:45:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1 引言

    近年来,由于微电子学和计算机技术的迅速发展,给EDA技术行业带来了巨大的变化。 HDL(hardware description language)硬件描述语言是一种描述电路行为的语言,是设计者和EDA工具的界面,设计者通过HDL描述自己的设计对象。目前比较流行的HDL主要有Verilog HDL、VHDL、AHDL等,其中Verilog HDL和VHDL因为适合标准化的方面而最终成为IEEE标准。但是Verilog HDL比VHDL更容易掌握,并且完成同一功能的Verilog HDL条数一般仅为VHDL的1/3,Verilog HDL 善于描述更低层设计包括结构级和物理层的设计,而VHDL设计技术很不直观,设计人员需要有EDA编程基础,经过半年左右的专业培训才能掌握,所以用Verilog HDL的优越性高一些。作为学习HDL设计方法的入门和基础,是一种值得大力推广的硬件描述语言。

2 汉明码的基本原理

    汉明码是一种能够纠正一个错码且编码效率较高的线性码。在偶数监督码中,无论信息位有多少,监督位只有一位,它使码组中“1”的个数为偶数,在接收端解码的时候,实际就是计算S= an-1⊕ an-2⊕。。。。⊕a0,若S=0,就认为无错,若S=1,就认为有错。上式称为监督关系式,S为校正子。由于校正子S的取值只有这样两种,它只能代表有错和无错两种信息,而不能指出错码的位置。如果监督位增加一位,即变成两位,可能有四种组合:00,01,10,11,故能表示四种不同虚报许,若用其中一种表示无错,则其余三种就有可能用来指示一位错码 的3种不同位置,同理,r个监督关系式就能指示一位错码的(2r-1)个可能位置.一般说来,若码长为n,信息位数为k,则监督位数r=n-k.如果希望用r个监督位够造出r个监督关系式来指示一位错码的n种可能位置,则要求
        2r-1≥n ; 2r≥k+r+1;
    设分组码(n, k)中k=4.为纠正一位错码,要求监督位数r≥3.若取r=3,则n= k+r=7.我们用a6a5a4…a0表示7个码元,用S1S2S3表示三个监督关系式中的校正子,则S1S2S3的值与错码位置的关系如下表.


   
由表可知,仅当一错码位置在 a2 a4 a5 a6时,校正子S1为1,否则S1为0.这就意味着a2 a4 a5 和a6 构成偶数监督关系
S1= a2 ⊕ a4⊕ a5⊕a6
    同理
S2= a1 ⊕ a3⊕a5⊕a6
S3= a0 ⊕a3⊕a4⊕a6
    在发送端编码时,信息位a6 a5 a4和 a3 的值决定于输入信号,因此它们是随机的。监督位a2 a1 和 a0 应根据信息位的取值按监督关系来确定,即监督位应使上三式中的S1S2S3的值为零。
a2⊕a4⊕a5⊕a6=0
a1⊕a3⊕a5⊕a6 =0
a0⊕a3⊕a4⊕a6=0
    有上式移项运算,解出监督位
a2= a4⊕a5⊕a6
a1= a3⊕a5⊕a6
a0= a3⊕a4⊕a6
    根给定信息位后,可直接计算出监督位,如下表


   
接收到每个码组后,先按上式计算出S1 S2 和S3 ,再按上表判断错码情况。例如,若接收码组为0000110,则计算的S1 =1,S2 =1,S3 =0,由于S1 S2 S3 等于110,可知a5位有一错码。上述方法构成的码称为汉明码。表Ⅱ所列的(7,4)汉明码最小码距是d0=3,这种码能纠正一个错码或检测两个错码。汉明码的编码效率等于k/n=(2r-1-r)/( 2r-1)=1-r/(2r-1)=1-r/n.当n很大时,则编码效率接近1。可见汉明码是一种高效码。

3 编码电路的实现

    本设计的开发平台是MAX+PLUSⅡ[4], MAX+PLUSⅡ是Altra公司专为本公司生产的PLD的研制和应用开发的软件它的突出特点在于其强大的综合能力和布局布线能力,另外还具有适用范围广、器件结构独立、通用性好、兼容性好、集成度与自动化程度高以及易学易用的特点.

    编码器设计的特点是使用了矩阵的乘法,假设A是输入至编码器的数据向量,G是矩阵乘法的发生矩阵,C是汉明码码字,那么根据矩阵乘法计算得到汉明码字。

    程序编写如下
module bianma(clk,reset,data_in,dcin,code_out,dcout);
input clk,reset;//时钟和复位信号.
input[3:0] data_in;//输入数据变量,位宽为4bit.
input dcin;//输入有效控制信号,定义1表无效,编码器不输出码字,定义0表有效.
output[6:0] code_out;//编码器输出,位宽为7bit.
output dcout;//输出有效控制信号,定义1表无效.定义0表有效.
reg[6:0] code_out;
reg dcout;
reg[3:0] datareg;
reg dcinreg;
wire c0=datareg[3];
wire c1=datareg[2];
wire c2=datareg[1];
wire c3=datareg[0];
wire c4=datareg[3]^datareg[2]^datareg[1];
wire c5=datareg[3]^datareg[2]^datareg[0];
wire c6=datareg[3]^datareg[1]^datareg[0];
always@(posedge clk or negedge reset)//根据时钟信号和输入使能信号采集数据.
if(!reset)
dcinreg<=1;
else
dcinreg<=dcin;
always@(posedge clk)//采集是否有效.
if (reset)
datareg<=0;
else if(!dcin)
datareg<=data_in;
always@(posedge clk)//码字在数据向量采集后一个时钟周期计算得到.
if (reset)
dcout<=1;
else
dcout<=dcinreg;
always@(posedge clk)//码字输出是否有效.
if(reset)
code_out <=0;
else
code_out<={c0,c1,c2,c3,c4,c5,c6};
endmodule

    该源程序经过编译和仿真,时序图如下所示,得到结果符合系统功能要求


   
本设计使用的芯片为MAX3000A系列EPM3032ALC44-4,芯片的输入输出端口的设计采用D触发器组来缓存数据,确保采集数据向量和发送的码字稳定,并于时钟信号严格同步。
4 结束语

    本文通过介绍汉明码的编码原理,进而用Verilog HDL进行汉明码编码器的设计,并通过时序仿真波形图进行逻辑分析,结果符合实际情况.而Verilog HDL有着类似C语言的编程风格,易于学习和掌握,与传统的原理图设计方法相比较, Verilog HDL更适合于规模日益增大的数字系统. Verilog HDL等硬件描述语言进行数字系统的设计是EDA发展的趋势,在数字系统的设计中有着广泛的空间.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-1 00:41 , 耗时 0.091343 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表