课程设计(论文)基于VHDL的HDB3编译码器的设计

上传人:仙*** 文档编号:29487407 上传时间:2021-10-07 格式:DOC 页数:19 大小:805.52KB
返回 下载 相关 举报
课程设计(论文)基于VHDL的HDB3编译码器的设计_第1页
第1页 / 共19页
课程设计(论文)基于VHDL的HDB3编译码器的设计_第2页
第2页 / 共19页
课程设计(论文)基于VHDL的HDB3编译码器的设计_第3页
第3页 / 共19页
点击查看更多>>
资源描述
基于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码中的连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 +VHDB3码的特点如下:(1) 基带信号无直流成分,且只有很小的低频成分;(2) 连0串符号最多只有3个,利于定时信息的提取;(3) 不受信源统计特性的影响。 HDB3码的特点如下:(1) 基带信号无直流成分,且只有很小的低频成分;(2) 连0串符号最多只有3个,利于定时信息的提取;(3) 不受信源统计特性的影响。HDB3码的译码规则: HDB3码的译码是编码的逆过程,其译码相对于编码较简单。从其编码原理可知,每一个破坏符号V总是与前一非0符号同极性,因此,从收到的HDB3码序列中,容易识别V符号,同时也肯定V符号及其前面的3个符号必是连0符号,于是可恢复成4个连0码,然后再将所有的-1变成+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”,因为这涉及到由现在事件的状态决定过去事件状态的问题。按照实时信号处理的理论,这是没办法实现的。但在实际的电路中,可以考虑用寄存器的方法,首先把信码寄存在寄存器里,同时设置一个计数器计数两个“V”之间“1”的个数,经过4个码元时间后,由一个判偶电路来给寄存器发送是否插“B”的判决信号,从而实现插“B”功能。即首先完成插“V”工作,接着执行插“B”功能。最后实现单极性变双极性的信号输出。这样做的好处是:输入进来的信号和插“V”、插“B”功能电路中处理的信号都是单极性信号,且需要的寄存器的数目可以少很多。另外,如何准确识别电路中的“1”、“V”和“B”。因为“V”和“B”符号是人为标识的符号,但在电路中最终的表现形式还是逻辑电平“1”。解决的方法是利用了双相码,将其用二进制码去取代。例如,代码: 1 1 0 0 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”和单极性码转变成双极性码。各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。(1)插“V”模块的实现1)、插“V”模块的建模插“V”模块的功能实际上就是对消息代码里的四连0串的检测即当出现四个连0串的时候,把第四个“0”变换成为符号“V”(“V”可以是逻辑“1”高电平),而在其他情况下,则保持消息代码的原样输出。同时为了减少后面工作的麻烦,在进行插“V”时,用“11”标识它,“1”用“01”标识,“0”用“00”标识。插“V”符号的设计思想很简单:首先判断输入的代码是什么(用一个条件语句判断),如果输入的是“0”码,则接着判断这是第几个“0”码,则把这一位码元变换成为“V”码。在其他条件下,让原代码照常输出。 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=doutdatain=”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”标识,所以通过以下的程序可以很容易实现。如下图为实现极性变换功能的流程图。 根据编码规则,“B”符号的极性与前一非零符号相反,“V”极性符号与前一非零符号一致。因此将“V”单独拿出来进行极性变换(由前面已知“V”已经由“11”标识,所以很好与其他的代码区别),余下的“1”和“B”看成一体进行正负交替,这样就完成了HDB3的编码。这个部分遇到的难点在于:在MAX+plus II 10.0软件仿真过程中,它无法识别“-1”,在它的波形仿真中只有“1”和“0”。因此在这里采用了双相码来分别表示“-1”、“+1”、“0”。要得到所需的结果,仅仅在最后加一个硬件(如四选一数字开关CC4052)就可以将程序中所定义的“00”、“01”、“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”dout=”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_out即为最终形成的标准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码检测相加器相加器 扣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码信号和来自正、负整流输出的和路信号。由于该和路信号可能包含有B脉冲和V脉冲,因此需要在扣V扣B模块中,去除V和B脉冲。本模块的建模方法是,用V码检测模块所检测出的V码信号,去控制一个移位寄存器,若未碰到V脉冲,则整流输出合成信号在时钟的节拍下,顺利通过移位寄存器,当碰到有V脉冲时,该V脉冲将使移位寄存器清零。考虑到四连0,即V脉冲及其前面的三个码元应为0码,所以,可设置四位的移位寄存器,当V码清零时,同时将移存器中的四位码全变为0。不管是否有B脉冲,在此模块中,一并清零,因而无需另设扣B电路。另外移位四位寄存器起到延时四位时钟周期的作用,以使所检测出的V脉冲与信号流中的V脉冲位置对齐,保证清零的准确性。扣V扣B模块框图如图4-4。 图4-2 扣V扣B模块框图5 实际电路连接图 HDB3编译码器电路连接图6总结通过一步步有条不紊的分析和思考,更重要的是在设计中,根据实际情况,对设计初期的思想做不断完善和改进,因为在设计之前的思路,只能说是一个大体的方向,很多时候,实际的操作和设计要细致和复杂的多,或者原来的想法根本就行不通,得从实际设计的角度一步步来完成了这样一个系统设计。总结一下实际操作的设计过程,可得到如下设计流程图:学习VHDL语言设计分析HDB3码编/解码器功能确定设计方案仿真不通过应用VHDL进行编程对系统仿真测试、选择合适芯片并定义管脚系统功能的硬件测试调试达到要求、完成设计参考文献(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(reset,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 then -连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_logic_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)=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到来清零 end 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.all;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 if 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 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 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(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_logic_vector(3 downto 0);-两个4位移位寄存器signal t:std_logic_vector(1 downto 0);begin t=datain;process(clk,datain)isbeginif(clk=1 and clkevent)then D1(2 downto 1)=D1(3 downto 2);-进行移位 D0(2 downto 1)=D0(3 downto 2);end if;end process;process(clk,datain) isbeginif(clk=1 and clkevent)then if (t=11 and D1(3 downto 0)=0001 and D0(3 downto 0)=0001)or(t=01 and D1(3 downto 0)=0000 and D0(3 downto 0)=0001)then D1(3)=0;D0(3)=0;D1(0)=D1(1);D0(0)=D0(1);-判断有V输入,输出0elsif(t=11 and D1(3 downto 1)=001 and D0(3 downto 1)=001)or(t=01 and D1(3 downto 1)=000 and D0(3 downto 1)=001)then D1(3)=0;D0(3)=0;D1(0)=0;D0(0)=0;-判断有B输入else D1(3)=t(1);D0(3)=t(0);D1(0)=D1(1);D0(0)=D0(1);-其他原样输出end if;end if;end process;process(clk)isbeginif(clk=1 and clkevent) then if(D1(0)=1 and D0(0)=1)or(D1(0)=0 and D0(0)=1) then dout=1;-判断1,且输出1 else dout=0; end if;end if;end process;end;附录2:波形图 图1 插V波形图 图2 补B波形图 图3 极性变换波形图 图4 编码输出波形图 图5 译码输出波形图
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!