基于FP GA的HDB3码的编码器与译码器设计(软件设计)
由图4.4可以看出,HDB3译码器的输出信号dataout与HDB3编码器的基带输入信号datain信号的波形一致,HDB3译码器得到验证。
27
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
第五章 结论
本文主要是用FPGA来实现HDB3码的编码和译码器。利用EDA技术进行设计,重点在于实现HDB3的编码过程和译码过程的处理,用VHDL对其功能进行描述。由于HDB3码是双极性码,而FPGA只能处理单极性。因此在实际应用中须外加辅助电路,使单双极性实现相互转换。本文对此只作简单介绍,主要对FPGA可实现的程序部分进行详细分析叙述。最后,通过QuartusII对其各个功能进行仿真,验证整个设计的正确性。 本设计的主要优点在于充分利用了FPGA的技术优势,在编码器中主要包括3个模块即插“V”模块、插“B”模块、双单极性转换模块,译码器只有一个模块。将HDB3码的编译码以及相关功能模块集成在一块芯片上,简化了系统的硬件结构,减少了器件的种类和数量,提高了系统的稳定性,又由于FPGA的在线可编程功能和引脚可定义功能,有利于用户修改调试。
但由于利用EDA对电子系统进行设计的经验不多,本设计只实现对HDB3码进行简单的编译功能,但整个设计程序显得有点复杂。在这个设计过程中,虽然未能完整的实现HDB3编译码的功能,但是令我获益不少。由于受现在所学的知识的限制,对EDA的展望待进一步作深入研究,通过学习与实践,积累更多的知识与设计经验,把整个设计再进行功能的完善,再使逻辑算法更加简化从而提高整个系统的效率。
28
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
参考文献
[1] 曹志刚,钱亚生,现代通信原理[M],北京:清华大学出版社,1992 [2] 樊昌信、张甫翔、徐炳祥,通信原理[M],北京:国防工业出版社,2001 [3] 张会生、陈树新,现代通信系统原理[M],北京:高等教育出版社,2002 [4] 曹志刚、钱亚生,现代通信原理[M],北京:清华大学出版社,1992
[5] 张辉、曹丽娜,现代通信原理与技术[M],西安:西安电子科技大学出版社,2002 [6] 刘皖、何道君、谭明,FPGA设计与应用[M],北京:清华大学出版社,2006 [7] 曾繁泰、李冰,李晓林,EDA工程概论[M],北京:清华大学出版社,2002 [8] 潘松,王国栋,VHDL实用教程[M],成都:电子科技大学出版社,2000
[9] 曾繁泰,候亚宁,崔元明,可编程器件应用导论[M],北京:清华大学出版社,2001 [10] 赵鑫、蒋亮,VHDL与数字电路设计[M],北京:机械工业出版社,2005 [11] 蒋青、吕翔,一种基于FPGA技术HDB3译码器的设计[J],微电子学,2007
[12] 段吉还、黄智伟,基于CPLD/FPGA的数字通信系统与设计[M],北京:电子工业出版社,2004
29
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
附录
A HDB3编码器的VHDL完整程序 Library ieee;
Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity hdb3plusv is
Port(clk :in std_logic; ---系统时钟输入 Datain :in std_logic; ---基带信号输入
Plusvout :out std_logic_vector(1 downto 0); ---插“V”处理后输出 End hdb3plusv;
Architecture behave of hdb3plusv is
Signal plusvregh : std_logic_vector(3 downto 0); Signal plusvreg1 : std_logic_vector(3 downto 0); Signal dataregn : std_logic_vector(2 downto 0); Begin Process(clk) Begin
If clk’event and clk=’1’ then If datain=’1’ then
Dataregn<=’0’ & dataregn(2 downto 1); Else
Dataregn<=’1’ & dataregn(2 downto 1);
End if; End process; Process(clk) Begin
If cld’event and clk=’1’ then
---在编码中,基带信号的“0”,用“00”来表示 ---基带信号的“1”,用“01”来表示
30
基于FP GA的HDB3码的编码器与译码器设计(软件设计)
---插“V”符号,用“10”来表示 ---检测到4个连0,则转化为“10”
If (datain=’0’) and (dataregn=”111”) and (plusvregh(3 downto 1)=”000” then Plusvregh<=’1’ & plusvregh(3 downto 1); Plusvreg1<=’0’ & plusvregh(3 downto 1); --否则,如果是“1”,则转化为“01” Elsif datain=’1’ then
Plusvregh<=’0’ & plusvregh(3 downto 1); Plusvreg1<=’1’ & plusvreg1(3 downto 1); ---如果是“0”,则转化为“00” Elsif datain=’0’ then
Plusvregh<=’0’ & plusvregh(3 downto 1); Plusvreg1<=’0’ & plusvreg1(3 downto 1);
End if; End if; End process; ---插“V”输出进程 Process(clk) Begin
If clk’event and clk=’1’ then
Plusvout<=plusvregh(0) & plusvreg1(0); End if; End process; End behave;
Library ieee;
Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity hdb3plusb is
Port(clk : in std_logic; ---系统时钟输入
Plusvin : in std_logic_vector(1 downto 0);---插“V”信号输入
31