数字基带信号HDB3码的编码器设计与建模.docx

上传人:b****3 文档编号:3385273 上传时间:2022-11-22 格式:DOCX 页数:15 大小:279.51KB
下载 相关 举报
数字基带信号HDB3码的编码器设计与建模.docx_第1页
第1页 / 共15页
数字基带信号HDB3码的编码器设计与建模.docx_第2页
第2页 / 共15页
数字基带信号HDB3码的编码器设计与建模.docx_第3页
第3页 / 共15页
数字基带信号HDB3码的编码器设计与建模.docx_第4页
第4页 / 共15页
数字基带信号HDB3码的编码器设计与建模.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数字基带信号HDB3码的编码器设计与建模.docx

《数字基带信号HDB3码的编码器设计与建模.docx》由会员分享,可在线阅读,更多相关《数字基带信号HDB3码的编码器设计与建模.docx(15页珍藏版)》请在冰豆网上搜索。

数字基带信号HDB3码的编码器设计与建模.docx

数字基带信号HDB3码的编码器设计与建模

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

题目:

数字基带信号HDB3码的编码器设计与建模

初始条件:

(1)MAXPLUSII10.02以上版本软件;

(2)课程设计辅导书:

《通信原理课程设计指导》

(3)先修课程:

数字电子技术、模拟电子技术、电子设计EDA、通信原理。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1)课程设计时间:

1周;

(2)课程设计题目:

根据指导老师给定的六套题目选择其中二套完成;

(3)本课程设计统一技术要求:

按照要求对选定的设计题目进行逻辑分析,掌握HDB3码的编码原理,了解各模块电路的逻辑功能,设计通信系统框图,画出实现电路原理图,编写VHDL语言程序,上机调试、仿真,记录实验结果波形,对实验结果进行分析;

(4)课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,并标明参考文献至少5篇;

(5)写出本次课程设计的心得体会(至少500字)。

时间安排:

第19周

参考文献:

江国强.EDA技术与应用.北京:

电子工业出版社,2010

JohnG.Proakis.DigitalCommunications.北京:

电子工业出版社,2011

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

摘要

本课程设计概括了HDB3数字编码器的研究背景、意义,同时对EDA技术和编码技术作了简要的说明。

设计方面包括规划基于VHDL的HDB3编码器设计的总体方案;基于VHDL的HDB3编码器的软件实现。

其中HDB3码的编码程序设计是在QuartusⅡ软件环境下进行的,首先在QuartusⅡ软件环境下建立一个工程,工程名和程序的实体名一致,并将其作为该工程的设计文件。

然后在VHDL文本编辑窗中输入设计的VHDL源程序,进行编译。

程序编译成功后要进行时序仿真,这一部分同样是在QuartusⅡ软件环境下完成的。

关键词:

HDB3;建模;VHDL;编码;QUARTUSⅡ

 

1QuartusⅡ简介

QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

  

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

  

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

  

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

  

MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。

Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。

  

AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

图1QuartusⅡ操作界面

 

2VHDL语言的介绍

常用的硬件描述性语言有VHDL、Verilog和ABEL语言。

VHDL语言起源于美国国防部的VHSIC,VHDL是一种高级描述语言,适用于行为级和RTL级的描述相对与Verilog语言和ABEL语言这些较低一级的适合描述门级电路的描述性语言而言,其具有以下的优点:

⒈设计方法灵活、支持广泛

⒉系统硬件描述能力强

⒊VHDL语言描述与工艺不发生关系

⒋VHDL语言标准、规范,易于共享和复用

基于上述的特点,可知VHDL语言可读性好,又能被计算机识别。

VHDL语言中设计实体、程序包、设计库,为设计人员重复利用已有的设计提供了诸多技术手段。

可重复利用他人的IP模块和软核也是VHDL的另一特色,许多设计不必每次都从头再来,只要在更高层次上把IP模块组合起来,就能达到事半功倍的效果。

这样,设计人员自行开发的IP模块在集成电路设计中占有重要的地位。

因此本课程设计采用VHDL语言设计一个完善的HDB3码编码器。

3HDB3码编码器的建模与实现

3.1HDB3码的编码规则

在基带传输中,常用的码型有AMI码、HDB3码、4B/3T码、CMI码、以及双相码等。

其中,AMI码是将输入单极性波形的所有正脉冲变为适合于在信道传输的正负极性交替的脉冲,而HDB3码则是在AMI码基础上改进的一种双极性归零码,它除具有AMI码功率谱中无直流分量,可进行差错自检等优点外,还克服了AMI码当信息中出现连“0”码时定时提取困难的缺点,同时HDB3码频谱能量主要集中在基波频率以下,占用频带较窄,因此被广泛用作PCM线路传输码型,因此要了解HDB3码的编码规则,首先要知道AMI码的构成规则,AMI码就是把单极性脉冲序列中相邻的“1”码变为极性交替的正、负脉冲。

将“0”码保持不变,把“1”码变为+1、-1交替的脉冲。

如:

信息序列:

10011010111100001

AMI码:

+100-1+10-10+1-1+1-10000+1

HDB3码是一种AMI码的改进型,它的编码过程为:

①没有4个或4个连“0”串时,HDB3编码规律与AMI码相同,即“1”码变为“+1”、“-1”交替脉冲。

②当代码序列中出现4个或4个以上连“0”串时,则将每4个连“0”小段即“0000”的第4个0变换成与前一非“0”符号同极性的符号,用破坏符号V表示。

③为了使附加V符号后的序列不破坏“极性交替反转”造成的无直流特性,还必须保证相邻V符号也应极性交替。

这一点,当相邻V符号之间有奇数个非0符号时,则是能得到保证,当有偶数个非0符号时,则就得不到保证,这时再将该小段的第一个0变换成+B或-B,B符号的极性与前一非0符号的极性相反,并让后面的非0符号从V符号开始再交替变换。

举例如下:

信码101011000001100001

HDB3码+10-10+1-1000-10+1-1+100+1-1

V、B-V+B+V

HDB3码的特点如下:

(1)基带信号无直流成分,且只有很小的低频成分;

(2)连0串符号最多只有3个,利于定时信息的提取;

(3)不受信源统计特性的影响。

图2各个数字基带信号编码间关系

3.2基于VHDL的编码器的建模及实现

3.2.1编码器的VHDL建模

图3HDB3码编码器模型

HDB3编码器建模的难点之一是判断插“B”,实现中可利用寄存器,首先把

信码存入寄存器,同时设置一个计数器计两个“V”之间“1”的个数,经过4个码元后,由判偶电路给寄存器发送是否插“B”的信号,实现插入“B”的功能。

本设计思想不需要首先把消息代码变换为AMI码,然后进行V符号和B符号的操作,而是按照HDB3编码规则直接对消息代码进行插入“V”符号和“B”符号的操作,后再实现单极性变双极性的信号输出,这样可以减少寄存器的数量。

如图所示:

整个HDB3码的编码器包括3个功能部分:

添加破坏符号“V”、添加符号“B”和单极性码转变成双极性码,各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。

3.2.2基于VHDL编码器的实现

1.添加破坏符号“V”的实现

添加破坏符号“V”模块的功能实际上就是对消息代码里的四个连0串的检测,即当出现四个连0串的时候,把第四个“0”变换成符号“V”,而在其他的情况下,则保持消息代码的原样输出,同时为了区别代码“1”、“V”和“0”,在添加破坏符号“V”时,用“11”标识符号“V”,用“01”标识符号“1”,用“00”标识符号“0”。

因此,添加破坏符号“V”的设计思想如下:

首先判断输入的代码是什么,如果输入的符号是“0”码,则接着判断这是第几个“0”码,如果是第四个“0”码,则把这个“0”码变换成“V”码。

在其他的情况下,让原码照常输出。

程序流程图如图3.2所示:

图4添加破坏符号“V”符号流程图

假设输入某信息序列,根据设计思想,输入代码一添加破坏符号“V”后的关系如下:

信息序列:

10000100001100011

添加破坏符号V后:

010*********

2.添加符号“B”的实现

根据HDB3码的编码规则可知:

添加破坏符号“V”模块的功能是为了保证附加“V”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“V”符号之间有偶数个非0符号的时候,把后一小段的第一个“0”变换成一个非破坏符号——“B”符号。

如图3.3所示。

其中:

①FIRSTV作为前面是否出现“11”即符号“V”的标志位,其中0表示前面没有出现V,1表示前面已经出现过符号V。

②COUNT1作为记非0符号的奇偶数,其中0表示为偶数,1表示为奇数。

③FIRST_1遇1状态寄存器,1表示前面遇到过1,0表示没有遇到过。

④在本程序中用“10”来标识符号“B”。

⑤在本程序中用“01”来标识符号“1”。

⑥在本程序中用“00”来标识符号“0”。

⑦在本程序中用“11”来标识符号“V”。

图5添加符号“B”符号流程图

插“B”模块是这个设计的一个难点,因为它涉及到一个由现在事件的状态决定过去事件状态的问题。

其次还有如何确定是“1”,还是“V”的问题。

处理难点的思路是:

首先把码元(经插“V”处理过的)放入一个4位的移位寄存器里,在同步时钟的作用下,同时进行是否插“B”的判决,等到码元从移位寄存器里出来的时候,就可以决定是应该变换成“B”符号,还是照原码输出。

因此,在程序的结构中可进行元件声明,调用库里的D触发器来实现延迟作用。

3.3编码中单/双极性转换的实现

3.3.1单/双极性转换的流程图

根据HDB3码的编码规则,可知“V”的极性是正负交替变换的,而余下的“1”和“B”本设计把其看成为一体且是正负交替变换的,同时满足“V”的极性与前面的非零码极性一致。

由此本设计就把“1”和“B”看成一组,而“V”单独作为一组来做正负交替变换。

同时,已知“1”、“V”,“B”已经分别用双相码“01”,“11”,“10”标识,所以对“1”,“V”,“B”的正负交替变换很容易实现。

图6单双极性变换控制的程序流程图—“01”和“10”部分

其中在图中:

①以01表示+1。

②以10表示-1。

③以00表示0。

仿真软件无法识别“-1”,因此采用双相码来分别表示“-1”,“+1”和“0”,要想得到所需要的结果,仅仅在后加一个硬件(如四选一数字开关CC4052),就可以将程序中所定义的“00”、“01”和“11”分别转换成0、+1和-1,从而达到设计所需结果

4HDB3码编码器完整源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYHDB3IS

PORT(CODEIN:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

CODEOUT:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDHDB3;

ARCHITECTUREBEHAVEOFHDB3IS

SIGNALCNT0:

INTEGER:

=0;

SIGNALFLAG0:

INTEGERRANGE1DOWNTO0:

=0;

SIGNALFLAG1:

INTEGERRANGE1DOWNTO0:

=0;

SIGNALFLAG2:

INTEGERRANGE1DOWNTO0:

=1;

SIGNALFLAG3:

INTEGERRANGE1DOWNTO0:

=0;

SIGNALFIRSTV:

INTEGERRANGE1DOWNTO0:

=0;

SIGNALCODEOUTV:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALS0:

STD_LOGIC_VECTOR(4DOWNTO0):

="00000";

SIGNALCODEOUTB:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALS1:

STD_LOGIC_VECTOR(4DOWNTO0):

="00000";

SIGNALCLKB:

STD_LOGIC;

SIGNALCLKV:

STD_LOGIC;

SIGNALCLKOUT:

STD_LOGIC;

SIGNALS2:

STD_LOGIC_VECTOR(4DOWNTO0):

="00000";

SIGNALS3:

STD_LOGIC_VECTOR(2DOWNTO0);

COMPONENTDFF

PORT(D:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC);

ENDCOMPONENT;

BEGIN

VCLK:

CLKV<=CLKAFTER10NS;

ADD_V:

PROCESS(CLK,CLR)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCLR='1'THEN

CODEOUTV<="000";

CNT0<=0;

ELSE

CASECODEINIS

WHEN'1'=>

CNT0<=0;

IF(FLAG0=0)THEN

CODEOUTV<="110";

FLAG0<=1;

ELSE

CODEOUTV<="010";

FLAG0<=0;

ENDIF;

WHEN'0'=>

IFCNT0=3THEN

IFFIRSTV=0THEN

IFFLAG0=0THEN

CODEOUTV<="011";

FLAG1<=0;

ELSE

CODEOUTV<="111";

FLAG1<=1;

ENDIF;

FIRSTV<=1;

ELSE

IFFLAG1=0THEN

CODEOUTV<="111";

FLAG1<=1;

FLAG0<=1;

ELSE

CODEOUTV<="011";

FLAG1<=0;

FLAG0<=0;

ENDIF;

ENDIF;

CNT0<=0;

ELSE

CNT0<=CNT0+1;

CODEOUTV<="000";

ENDIF;

WHENOTHERS=>

CODEOUTV<="000";

CNT0<=CNT0;

ENDCASE;

ENDIF;

ENDIF;

ENDPROCESSADD_V;

S0(0)<=CODEOUTV(0);

S1(0)<=CODEOUTV

(1);

S2(0)<=CODEOUTV

(2);

DS21:

DFFPORTMAP(S2(0),CLK,S2

(1));

DS11:

DFFPORTMAP(S1(0),CLK,S1

(1));

DS01:

DFFPORTMAP(S0(0),CLK,S0

(1));

DS22:

DFFPORTMAP(S2

(1),CLK,S2

(2));

DS12:

DFFPORTMAP(S1

(1),CLK,S1

(2));

DS02:

DFFPORTMAP(S0

(1),CLK,S0

(2));

DS23:

DFFPORTMAP(S2

(2),CLK,S2(3));

DS13:

DFFPORTMAP(S1

(2),CLK,S1(3));

DS03:

DFFPORTMAP(S0

(2),CLK,S0(3));

BCLK:

CLKB<=NOTCLK;

ADD_B:

PROCESS(CLKB)

BEGIN

IFCLKB'EVENTANDCLKB='1'THEN

CASECODEOUTVIS

WHEN"110"=>

FLAG3<=1;

S2(4)<=S2(3);

S1(4)<=S1(3);

S0(4)<=S0(3);

WHEN"010"=>

FLAG3<=0;

S2(4)<=S2(3);

S1(4)<=S1(3);

S0(4)<=S0(3);

WHEN"111"=>

IFFLAG3=0THEN

S2(4)<='1';

S1(4)<='0';

S0(4)<='1';

FLAG3<=1;

ELSE

S2(4)<=S2(3);

S1(4)<=S1(3);

S0(4)<=S0(3);

ENDIF;

FLAG2<=1;

WHEN"011"=>

IFFLAG3=0THEN

S2(4)<=S2(3);

S1(4)<=S1(3);

S0(4)<=S0(3);

ELSE

S2(4)<='0';

S1(4)<='0';

S0(4)<='1';

FLAG3<=0;

ENDIF;

FLAG2<=0;

WHENOTHERS=>

S2(4)<=S2(3);

S1(4)<=S1(3);

S0(4)<=S0(3);

ENDCASE;

CODEOUTB<=S2(4)&S1(4)&S0(4);

ENDIF;

ENDPROCESSADD_B;

OUTCLK:

CLKOUT<=CLKAFTER5NS;

OUTPUT:

PROCESS(CLKOUT)

BEGIN

IFCLKOUT'EVENTANDCLKOUT='1'THEN

IFCODEOUTB="000"THEN

CODEOUT<="00";

ELSIFCODEOUTB="001"ORCODEOUTB="010"ORCODEOUTB="011"THEN

CODEOUT<="01";

ELSE

CODEOUT<="10";

ENDIF;

ENDIF;

ENDPROCESSOUTPUT;

ENDBEHAVE;

5HDB3码编码器的波形仿真及分析

图7输入全“0”时编码输出

输入全0码时输出为B00V,且正负交替符合编码规则。

图8输入全“1”时编码输出

输入全为1时,为+1,-1交替,图中波形为01,11交替,符合HDB3编码规则。

图9输入“100001000011000011”时编码输出

输入为100001000011000011时,输出为100000001001000000011001100000100110,其中01和10代表+1和-1;+v和-v;+B和-B.通过Minusout和Plusout来判断极性,plusout为1表示出现了“+1”,minusout为1表示出现了“-1”,当plusout和minusout应为交替出现的,如果有连续出现两个高电平时,则后一个一定是V脉冲,并且输出波形有一定的延时。

6总结与心得

本次课程设计内容丰富,涉及的知识面较广。

在设计前期,通过查找资料为设计准备,使我对所学专业方面的许多知识又温习了一遍,许多以前很模糊、很孤立的部分知识通过这次设计得以贯穿,而且掌握得更加地稳固了;此外,通过这次课程设计,在软件编程方面,使我了解到了自己的许多不足之处,通过查找参考资料和指导老师耐心的辅导,使我对使用VHDL语言有了一定的掌握。

但在设计过程中也出现了不少问题,设计前期在利用quartusⅡ软件工具对HDB3数字编码器的程序进行编译时,由于工程名和实体名不一致使得编译无法进行。

通过这次课程设计,我不仅加深了对通信原理理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。

设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。

7参考文献

[1]樊昌信,张甫翎,徐炳祥,吴成柯.通信原理国防工业出版社,2005.5

[2]王虹.通信系统原理国防工业出版社,2014.8

[3]谭会生,张昌凡.EDA技术及应用西安科技大学出版社,2004.4

[4]段吉海,黄智伟.基于CPLD/FPGA的数字通信系统建模与实现电子工业出版社,2004.5

[5]王乐毅.EDA设计技术与方法PLD与EDA工具青岛化工学院学报,2001

[6]林敏,方颖立.VHDL数字系统设计与高层次综合信息时代,2002

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

当前位置:首页 > 农林牧渔 > 林学

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

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