课程设计(论文)基于VHDL的HDB3编译码器的设计_第1页
课程设计(论文)基于VHDL的HDB3编译码器的设计_第2页
课程设计(论文)基于VHDL的HDB3编译码器的设计_第3页
课程设计(论文)基于VHDL的HDB3编译码器的设计_第4页
课程设计(论文)基于VHDL的HDB3编译码器的设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于vhdl的hdb3编译码器的设计 专业: 通信工程 班级: 姓名: 学号: 指导老师: 设计时间:2011/12/7-2011/12/21 基于vhdl的hdb3编译码器的设计方案1 设计流程1.1可编程逻辑器件的一般设计流程可编程逻辑器件的设计过程是利用eda开发软件和编程工具对器件进行开发的过程。可编程逻辑器件的一般设计流程如图1-1所示,包括设计准备,设计输入,功能仿真,设计处理,时序仿真和器件编程及测试等七个步骤。图1-1 可编程逻辑器件的一般设计流程2 hdb3码介绍2.1 hdb3码的编/译码规则 hdb3码的编码规则:(1) 将消息代码变换成ami码;(2) 检查ami码中的

2、连0情况,当无4个以上的连0传时,则保持ami的形式不变;若出现4个或4个以上连0时,则将1后的第4个0变为与前一非0符号(+1或-1)同极性的符号,用v表示(+1记为+v,-1记为-v(3) 检查相邻v符号间的非0符号的个数是否为偶数,若为偶数,则再将当前的v符号的前一非0符号后的第1个0变为+b或-b符号,且b的极性与前一非0符号的极性相反,并使后面的非0符号从v符号开始再交替变化。举例如下:代码 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 hdb3码 +1 0 -1 0 +1 -1 0 0 0 -1 0 +1 -1 +1 0 0 +1 -1v、b -v +b

3、+vhdb3码的特点如下:(1) 基带信号无直流成分,且只有很小的低频成分;(2) 连0串符号最多只有3个,利于定时信息的提取;(3) 不受信源统计特性的影响。 hdb3码的特点如下:(1) 基带信号无直流成分,且只有很小的低频成分;(2) 连0串符号最多只有3个,利于定时信息的提取;(3) 不受信源统计特性的影响。hdb3码的译码规则: hdb3码的译码是编码的逆过程,其译码相对于编码较简单。从其编码原理可知,每一个破坏符号v总是与前一非0符号同极性,因此,从收到的hdb3码序列中,容易识别v符号,同时也肯定v符号及其前面的3个符号必是连0符号,于是可恢复成4个连0码,然后再将所有的-1变成

4、+1后变得到原消息代码。 举例如下:hdb3码 +1 0 -1 0 +1 -1 0 0 0 -1 0 +1 -1 +1 0 0 +1 -1v符号 -v +v 译码 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 3 用vhdl语言设计hdb3编码器设计任务与要求将一串行输入码流编为hdb3码输出(编码部分);将一串行输入的hdb3码解码后串行输出(解码部分)。3.1 hdb3编码器实现的基本原理从编码规则来分析,这个设计的难点之一是如何判决是否应该插“b”,因为这涉及到由现在事件的状态决定过去事件状态的问题。按照实时信号处理的理论,这是没办法实现的。但在实际的电路中,可

5、以考虑用寄存器的方法,首先把信码寄存在寄存器里,同时设置一个计数器计数两个“v”之间“1”的个数,经过4个码元时间后,由一个判偶电路来给寄存器发送是否插“b”的判决信号,从而实现插“b”功能。即首先完成插“v”工作,接着执行插“b”功能。最后实现单极性变双极性的信号输出。这样做的好处是:输入进来的信号和插“v”、插“b”功能电路中处理的信号都是单极性信号,且需要的寄存器的数目可以少很多。另外,如何准确识别电路中的“1”、“v”和“b”。因为“v”和“b”符号是人为标识的符号,但在电路中最终的表现形式还是逻辑电平“1”。解决的方法是利用了双相码,将其用二进制码去取代。例如,代码: 1 1 0 0

6、 1 0双相码 10 10 01 01 10 01 这样就可以识别电路中的“1”、“v”、“b”。也可以人为地加入一个标识符(其最终目的也是选择输出“1”的极性)。控制一个选择开关,使输出“1”的极性能按照编码规则进行变化。3.2 hdb3编码器的设计过程插“b”插“v”极性转换在hdb3码的vhdl建模思想是在消息代码的基础上,依据hdb3编码规则进行插人“v”符号和“b”符号的操作,且用2位二进制代码分别表示。最后完成单极性信号变成双极性信号的转换。其编码模型如图1所示:消息码hdb3码图3-1 hdb3编码实现流程整个hdb3编码器包含3个功能部分:插“v”、插“b”和单极性码转变成双极

7、性码。各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。(1)插“v”模块的实现1)、插“v”模块的建模插“v”模块的功能实际上就是对消息代码里的四连0串的检测即当出现四个连0串的时候,把第四个“0”变换成为符号“v”(“v”可以是逻辑“1”高电平),而在其他情况下,则保持消息代码的原样输出。同时为了减少后面工作的麻烦,在进行插“v”时,用“11”标识它,“1”用“01”标识,“0”用“00”标识。插“v”符号的设计思想很简单:首先判断输入的代码是什么(用一个条件语句判断),如果输入的是“0”码,则接着判断这是第几个“0”码,则把这一位码元变换成为“v”码。在其他条件下,让原代码

8、照常输出。 startcounter=0datain=0 ndout=01 ycounter=counter+1counter=3 n ydout=11dout=00counter=0end 图3-2所示为插“v”符号的流程图(2) 插”b”模块的实现1)建模 插“b”模块的功能是保证附加“v”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“v”符号之间有偶数个非0符号的时候,把后一小段的第1个“0”变换成一个非破坏符号“b”符号。flag=0startdatain=”11”datain=”00”datain=”01”flag=1datain=doutdatain=doutdat

9、ain=”11”datain=”01”even=0even=even+1even=0even=1dout=dataindataout=”10”dout=dataindout=d1(0)d0(0)end 图3-3 插“b”功能的流程图(3)单极性变双极性的实现1)建模 根据hdb3的编码规则,我们可以知道,“v”的极性是正负交替的,余下的“1”和“b”看成一体且是正负交替的,同时满足“v”的极性与前面的非零码极性一致。由此我们可以将其分别进行极性变换来实现。从前面的程序知道,“v”、“b”、“1”已经分别用双相码“11”、“10”、“01”标识,“0”用“00”标识,所以通过以下的程序可以很容易

10、实现。如下图为实现极性变换功能的流程图。 根据编码规则,“b”符号的极性与前一非零符号相反,“v”极性符号与前一非零符号一致。因此将“v”单独拿出来进行极性变换(由前面已知“v”已经由“11”标识,所以很好与其他的代码区别),余下的“1”和“b”看成一体进行正负交替,这样就完成了hdb3的编码。这个部分遇到的难点在于:在max+plus ii 10.0软件仿真过程中,它无法识别“-1”,在它的波形仿真中只有“1”和“0”。因此在这里采用了双相码来分别表示“-1”、“+1”、“0”。要得到所需的结果,仅仅在最后加一个硬件(如四选一数字开关cc4052)就可以将程序中所定义的“00”、“01”、“

11、11”分别转换成0、+1、-1,从而达到设计所需结果。2)实现单/双极性变换的硬件部分简介由上述的程序下载到fpga或cpld中,其输出结果并不是“+1”、“-1”、“0”的多电平变化波形,而是单极性双电平信号,事实上,程序输出的是给单/双变换器的硬件电路地址信号。利用一个四选一的数据选择器cc4052,二维数组作为cc4052的选择地址,在输出端out可以得到符合规则的“+1”、“-1”、“0”变化波形。 startdatain=”00”datain=”11”datain=”11”datain=”01”dout=”00”even=1even=0even=1even=0dout=”11”dou

12、t=”01”dout=”01”dout=”11”even=eveneven=0even=1 end“01”:标识为+1;“11”:标识为-1; 图3-4单/双极性变换控制流程图3)双极性变换的硬件电路将上述的程序下载到可编程器件中,产生的编码结果是单极性双电平信号。此信号还不是真正意义上的hdb3码,需要将上述编码转换成“+1”、“-1”、“0”的多电平变化波形,而此工作单纯依靠数字电路是无法完成的。比较直接的方式,就是利用编码结果,控制多路模拟选择开关来实现,如利用双4选一的多路模拟选择开关cd4052如图4所示是利用多路模拟选择开关cd4052实现电平转换的电路连接图,图4中hdb3_ou

13、t即为最终形成的标准hdb3码流。图3-5 模拟选择开关电路图 4 用vhdl语言设计hdb3译码器4.1 hdb3解码器实现的基本原理hdb3译码器的整体模型1)整体模型译码原理:根据编码规则,破坏点v脉冲与前一个脉冲同极性。因此可从所接受的信码中找到v码,然后根据加取代节的原则,v码与前面的三位码必然是取代码,需要全部复原为四连0。只要找到v码,不管v码前是两个“0”码,一律把取代节清零,完成了扣v扣b功能,进而得到原二元信码序列。可实现hdb3译码的模型框图如图4-1所示,hdb3译码器包括双/单极性变换、v码检测、时钟提扣v扣b四部分组成。正整流负整流+v码检测-v码检测相加器相加器

14、扣v扣b时钟提取图4-1 hdb3译码的模型框图上图中双/单极性变换电路有两个正负整流电路组成。正整流电路提取正电平码部分;负整流电路提取负电平部分。v码检测电路包括+v码检测和-v码检测两部分。根据编码规则,v脉冲必然是同极性脉冲。当无v脉冲时,传号脉冲“+1”和“-1”交替出现。当连续出现两个“+1”或“-1”时,若无误码,则后一个一定是v脉冲。时钟提取电路用于提取同步时钟。扣v扣b电路在v脉冲和同步时钟的控制下,完成扣v扣b的功能。由于双/单极性变换电路涉及到双极性信号,无法在fpga中实现,需加外围硬件电路。2)扣v扣b模块建模扣v扣b模块有三个输入信号,即时钟信号、v码信号和来自正、

15、负整流输出的和路信号。由于该和路信号可能包含有b脉冲和v脉冲,因此需要在扣v扣b模块中,去除v和b脉冲。本模块的建模方法是,用v码检测模块所检测出的v码信号,去控制一个移位寄存器,若未碰到v脉冲,则整流输出合成信号在时钟的节拍下,顺利通过移位寄存器,当碰到有v脉冲时,该v脉冲将使移位寄存器清零。考虑到四连0,即v脉冲及其前面的三个码元应为0码,所以,可设置四位的移位寄存器,当v码清零时,同时将移存器中的四位码全变为0。不管是否有b脉冲,在此模块中,一并清零,因而无需另设扣b电路。另外移位四位寄存器起到延时四位时钟周期的作用,以使所检测出的v脉冲与信号流中的v脉冲位置对齐,保证清零的准确性。扣v

16、扣b模块框图如图4-4。 图4-2 扣v扣b模块框图5 实际电路连接图 hdb3编译码器电路连接图6总结通过一步步有条不紊的分析和思考,更重要的是在设计中,根据实际情况,对设计初期的思想做不断完善和改进,因为在设计之前的思路,只能说是一个大体的方向,很多时候,实际的操作和设计要细致和复杂的多,或者原来的想法根本就行不通,得从实际设计的角度一步步来完成了这样一个系统设计。总结一下实际操作的设计过程,可得到如下设计流程图:学习vhdl语言设计分析hdb3码编/解码器功能确定设计方案仿真不通过应用vhdl进行编程对系统仿真测试、选择合适芯片并定义管脚系统功能的硬件测试调试达到要求、完成设计参考文献(

17、1)邓勇、周择、邓斌著数字电路设计完全手册.国防工业出版社。2004;(2)朱正伟著ead技术及应用.清华大学出版社。2005;(3)全国大学生电子设计组委会著电子系统设计实践2005;(4)林明权著vhdl数字控制系统设计范例. 电子工业出版社(5)冯涛著可编程逻辑器件开发技术maxplus入门与提高 人民邮电出版社(6)王毓银著数字电路逻辑设计 高等教育出版社(7)赵俊超著集成电路设计vhdl语言教程 北京希望出版社附录1:基于vhdl语言的hdb3码编/译码器设计程序-插v模块use ieee.std_logic_unsigned.all;entity hdb3a isport(rese

18、t,clk,datain: in std_logic; dout: out std_logic_vector(1 downto 0);end entity;architecture rtl of hdb3a issignal counter:integer range 0 to 3;-整数beginprocess(reset,clk,datain) is beginif reset=0 then counter=0;dout=00;elsif(clk=1 and clkevent) then if datain=0 then counter=counter+1; if counter=3 th

19、en -连4个0了 dout=11; counter=0; else dout=00; -没连4个0 end if; else dout=01; -1 码 counter=0; end if;end if;end process;end;-补b模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hdb isport(reset,clk:in std_logic; datain: in std_logic_vector(1 downto 0);-输入 dout: out std_log

20、ic_vector(1 downto 0);-输出end;architecture rtl of hdb issignal d1,d0:std_logic_vector(3 downto 0);-两组4位移位寄存器signal flag,even:integer range 0 to 1;-两个标记beginprocess(clk,datain)isbegin if(clk=1 and clkevent)then-检测上升沿 d1(3)=datain(1);-数据输入 d0(3)=datain(0); d1(2 downto 0)=d1(3 downto 1); d0(2 downto 0)=

21、d0(3 downto 1);end if;end process;process(reset,clk,d1,d0) isbeginif reset=0 then flag=0; even=0;elsif(clk=1 and clkevent)then if (d1(3)=1 and d0(3)=1)then flag=1;-检测有v码输入 else flag=0; end if; if(d1(0)=0 and d0(0)=1)then even=even+1;-在下一个v到来之前检测1的个数 elsif(d1(0)=1 and d0(0)=1)then even=0;-下一个v到来清零 en

22、d if;end if;end process;process(reset,clk) isbeginif reset=0 then dout=00;elsif(clk=1 and clkevent) then if(flag=0 and even=0 and (d1(3)=1 and d0(3)=1) then dout=10;-输出b码 else dout=d1(0)&d0(0); end if;end if;end process; end;-极性变换library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.a

23、ll;entity hdb3c isport(reset,clk: in std_logic; datain: in std_logic_vector(1 downto 0); dout: out std_logic_vector(1 downto 0);end entity;architecture rtl of hdb3c issignal even:std_logic;-定义一个信号evenbeginprocess(reset,clk,datain)isbeginif reset=0 then even=0; dout=00;elsif(clk=1 and clkevent)then i

24、f datain=11 then if even=1 then dout=11; -负电平1 else dout=01; -正电平1 end if; elsif(datain=01 or datain=10) then if even=1 then even=0; dout=01; else even=1; dout=11; end if; else dout=00; end if;end if;end process;end;-顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity

25、 hdb3 isport(reset,clk,datain:in std_logic; dout: out std_logic_vector(1 downto 0);end;architecture rtl of hdb3 iscomponent hdb3a is-调用v检测器声明语句port(reset,clk,datain: in std_logic; dout: out std_logic_vector(1 downto 0);end component;component hdb is-调用b检测器声明语句port(reset,clk:in std_logic; datain: in

26、std_logic_vector(1 downto 0); dout: out std_logic_vector(1 downto 0);end component;component hdb3c is-调用极性转换声明语句port(reset,clk: in std_logic; datain: in std_logic_vector(1 downto 0); dout: out std_logic_vector(1 downto 0);end component;signal d1,d2:std_logic_vector(1 downto 0);begina: hdb3a port map

27、(reset,clk,datain,d1);-端口映射b: hdb port map(reset,clk,d1,d2);c: hdb3c port map(reset,clk,d2,dout);end;-译码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hdb3decoder isport(clk:in std_logic; datain:in std_logic_vector(1 downto 0); dout:out std_logic);end hdb3decoder;architecture rtl of hdb3decoder issignal d1,d0:std_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论