《基于VHDL的多功能调制解调器的设计.doc》由会员分享,可在线阅读,更多相关《基于VHDL的多功能调制解调器的设计.doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、 设计功能与要求调制解调器被人们称为“猫”,它是在发送端通过调制将数字信号转换为模拟信号,而在接收端通过解调再将模拟信号转换为数字信号的一种装置。这篇报告将通过这学期所学习的VHDL的相关知识设计一个多功能的调制解调器,下面是设计要求:1、 实现二进制振幅键控(2ASK)的调制与解调;2、 实现二进制频移键控(2FSK)的调制与解调;3、 实现二进制相位键控(2PSK)的调制与解调。二、 设计思路1、2ASK调制与解调(1)、2ASK调制器原理图如图1、图2所示,输入随机信号序列,经过基带信号形成器,产生波形序列,然后通过惩罚器进行频谱搬移,并使用带通滤波器来滤除高频谐波和低频干扰,最终输
2、出振幅键控信号。(2)、2ASK解调器以包络解调为例来说明,原理图如图3所示,其中分频器对时钟信号进行分频得到与发射端数字载波相同的数字载波信号;寄存器在时钟上升沿到来时把数字ASK信号存入寄存器;计数器利用分频输出的载波信号作为计数器的时钟信号,在其上升沿到来时,对寄存器中的ASK载波个数进行计数,当计数值大于3时,输出位1,否则为0;判决器则以数字载波为判决时钟,对计数器输出信号进行抽样判决,并输出解调后的基带信号。2、2FSK调制与解调(1)、2FSK调制器的原理图如图4所示,信号通过2个独立的分频器产生不同频率的载波信号,然后通过选通开关选择不同频率的高频信号,从而实现2FSK调制。(
3、2)、2FSK与2ASK解调相似,也是由分频器、寄存器、计数器和判决器构成,其结构构图如图5所示: 3、2PSK调制与解调 相位键控分为绝对调相(CPSK)与相对调相(DPSK)两种。CPSK是利用载波的不同相位去直接传送数字信息的一种方式;DPSK则是利用载波相位的相对变化来传送数字信号,即利用前后码之间载波相位的变化表示数字基带信号。(1)CPSK调制与解调 CPSK调制器结构图如图6所示。计数器对外部时钟信号进行分频与计数,并输出两路相位不同的数字载波信号;2选1开关在基带信号的控制下,对两路载波信号进行选择,输出信号即为CPSK信号。 CPSK解调器的结构图如图7所示,计数器q输出与发
4、射端同步的0相数字载波;将计数器输出的0相载波与数字CPSK信号中的载波进行与运算,当两比较信号在判决时刻都为1时,输出为1,否则输出为0,从而实现解调。(2)、DPSK调制与解调 DPSK调制器的结构图如图8所示,CPSK调制器,计数器,异或门和寄存器共同完成绝对码到相对码的变换功能。 DPSK解调器关键则是实现相对码到绝对码的转换,其结构图如图9所示,DPSK解调采用CPSK解调器与相对码到绝对码转换电路即可实现,其中,相对码到绝对码的转换是以在以计数器输出信号为时钟控制下完成的。三、 原理图说明1、 顶层模块的原理图 利用选择译码器输出矢量的每一位分别作为调制解调器的工作使能输入信号,从
5、而实现不同条件下多种调制解调方式间的选择,对于PSK调制与解调以CPSK为例来输入原理图。2、 利用仿真程序生成2ASK调制器的RTL视图及电路符号3、 利用仿真程序生成2ASK解调器的RTL视图及电路图4、 利用仿真程序生成2FSK调制器的RTL视图及电路图 5、 利用仿真程序生成2FSK解调器的RTL视图及电路图 6、 利用仿真程序生成2CPSK调制器的RTL视图及电路图 7、 利用仿真程序生成2CPSK解调器的RTL视图及电路图8、 利用仿真程序生成2DPSK调制器绝对码转换为相对码的 RTL视图及电路图 9、 利用仿真程序生成2DPSK解调器相对码转换为绝对码的RTL视图及电路图四、
6、VHDL源代码的实现1、选择译码器的程序library ieee;use ieee.std_logic_1164.all;entity selecter is port( sel:in std_logic_vector(2 downto 0); Q:out std_logic_VECTOR(5 downto 0) );end selecter;architecture rtl of selecter is begin process(sel) begin case sel is when 000 = Q Q Q Q Q Qnull; end case; end process;end rtl;
7、 2、2ASK调制器的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_ASK isport(clk :in std_logic; -系统时钟 start :in std_logic; -开始调制信号 x :in std_logic; -基带信号 y :out std_logic); -调制信号end PL_ASK;architecture behav of PL_ASK issignal q:integer rang
8、e 0 to 3; -分频计数器signal f :std_logic; -载波信号beginprocess(clk)beginif clkevent and clk=1 then if start=0 then q=0; elsif q=1 then f=1;q=q+1; -改变q后面数字的大小,就可以改变载波信号的占空比 elsif q=3 then f=0;q=0; -改变q后面数字的大小,就可以改变载波信号的频率 else f=0;q=q+1; end if;end if;end process;y=x and f; -对基带码进行调制end behav;3、2ASK解调器的程序lib
9、rary ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_ASK2 isport(clk :in std_logic; -系统时钟 start :in std_logic; -同步信号 x :in std_logic; -调制信号 y :out std_logic); -基带信号end PL_ASK2;architecture behav of PL_ASK2 issignal q:integer range 0 to 11; -计数器
10、signal xx:std_logic; -寄存x信号signal m:integer range 0 to 5; -计xx的脉冲数beginprocess(clk) -对系统时钟进行q分频,beginif clkevent and clk=1 then xx=x; -clk上升沿时,把x信号赋给中间信号xx if start=0 then q=0; -if语句完成q的循环计数 elsif q=11 then q=0; else q=q+1; end if;end if;end process;process(xx,q) -此进程完成ASK解调begin if q=11 then m=0; -
11、m计数器清零elsif q=10 then if m=3 then y=0; -if语句通过对m大小,来判决y输出的电平 else y=1; end if;elsif xxevent and xx=1then m=m+1; -计xx信号的脉冲个数end if;end process;end behav;4、2FSK调制器的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_FSK is port( clk:in std_
12、logic; -系统时钟 start:in std_logic; -开始调制信号 x:in std_logic; -基带信号 y:out std_logic -调制信号 );end PL_FSK;architecture rtl of PL_FSK issignal q1:integer range 0 to 11; -载波信号f1的分频计数器signal q2:integer range 0 to 3; -载波信号f2的分频计数器signal f1,f2:std_logic; -载波信号f1,f2begin process(clk) -此进程通过对系统时钟clk的分频,得到载波f1 begi
13、n if clkevent and clk=1 then if start=0 then q1=0; elsif q1=5 then f1=1; q1=q1+1; -改变q1后面的数字可以改变载波f1的占空比 elsif q1=11 then f1=0; q1=0; -改变q1后面的数字可以改变载波f1的频率 else f1=0; q1=q1+1; end if; end if; end process; process(clk) -此进程通过对系统时钟clk的分频,得到载波f2 begin if clkevent and clk=1 then if start=0 then q2=0; el
14、sif q2=0 then f2=1; q2=q2+1; -改变q2后面的数字可以改变载波f2的占空比 elsif q2=1 then f2=0; q2=0; -改变q2后面的数字可以改变载波f2的频率 else f2=0; q2=q2+1; end if; end if; end process; process(clk,x) -此进程完成对基带信号的FSK调制 begin if clkevent and clk=1 then if x=0 then y=f1; -当输入的基带信号x=0时,输出的调制信号y为f1 else y=f2; -当输入的基带信号x=1时,输出的调制信号y为f2 en
15、d if; end if; end process;end rtl;5、2FSK解调器的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_FSK2 is port( clk:in std_logic; -系统时钟 start:in std_logic; -同步信号 x:in std_logic; -调制信号 y:out std_logic -基带信号 );end PL_FSK2;architecture behav o
16、f PL_FSK2 issignal q:integer range 0 to 11; -分频计数器signal m:integer range 0 to 5; -计数器signal xx:std_logic; -寄存器begin process(clk) -对系统时钟进行q分频 begin if clkevent and clk=1 then xx=x; -在clk信号上升沿时,x信号对中间信号xx赋值 if start=0 then q=0; -if语句完成Q的循环计数 elsif q=11 then q=0; else q=q+1; end if; end if; end process
17、; process(q,xx) -此进程完成FSK解调 begin if q=11 then m=0; -m计数器清零 elsif q=10 then if m=3 then y=0; -if语句通过对m大小,来判决y输出的电平 else y=1; end if; elsif xxevent and xx=1 then m=m+1; end if; end process;end behav;6、2CPSK调制器的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_
18、unsigned.all;entity PL_CPSK isport(clk :in std_logic; -系统时钟 start :in std_logic; -开始调制信号 x :in std_logic; -基带信号 y :out std_logic); -已调制输出信号end PL_CPSK;architecture behav of PL_CPSK issignal q:std_logic_vector(1 downto 0); -2位计数器signal f1,f2:std_logic; -载波信号beginprocess(clk) -此进程主要是产生两重载波信号f1,f2begin
19、if clkevent and clk=1 then if start=0 then q=00; elsif q=01 then f1=1;f2=0;q=q+1; elsif q=11 then f1=0;f2=1;q=00; else f1=0;f2=1;q=q+1; end if;end if;end process;process(clk,x) -此进程完成对基带信号x的调制 beginif clkevent and clk=1 then -上升沿触发 if q(0)=1 then if x=1 then y=f1; -基带信号x为1时,输出信号y为f1 else y=f2; -基带信号
20、x为0时,输出信号y为f2 end if; end if;end if;end process;end behav;7、2CPSK解调器的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_CPSK2 isport(clk :in std_logic; -系统时钟 start :in std_logic; -同步信号 x :in std_logic; -调制信号 y :out std_logic); -基带信号end P
21、L_CPSK2;architecture behav of PL_CPSK2 issignal q:integer range 0 to 3; beginprocess(clk) -此进程完成对CPSK调制信号的解调beginif clkevent and clk=1 then if start=0 then q=0; elsif q=0 then q=q+1; -在q=0时,根据输入信号x的电平来进行判决 if x=1 then y=1; else y=0; end if; elsif q=3 then q=0; else q=q+1; end if;end if;end process;e
22、nd behav;8、2DPSK调制器绝对码转换为相对码的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_DPSK isport(clk :in std_logic; -系统时钟 start :in std_logic; -开始转换信号 x :in std_logic; -绝对码输入信号 y :out std_logic); -相对码输出信号end PL_DPSK;architecture behav of PL_D
23、PSK issignal q:integer range 0 to 3; -分频器signal xx:std_logic; -中间寄存信号 beginprocess(clk,x) -此进程完成绝对码到相对码的转换beginif clkevent and clk=1 then if start=0 then q=0; xx=0; elsif q=0 then q=1; xx=xx xor x;y=xx xor x; -输入信号与前一个输出信号进行异或 elsif q=3 then q=0; else q=q+1; end if;end if;end process;end behav;9、2DP
24、SK解调器相对码转换为绝对码的程序library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_DPSK2 isport(clk :in std_logic; -系统时钟 start :in std_logic; -开始转换信号 x :in std_logic; -相对码输入信号 y :out std_logic); -绝对码输出信号end PL_DPSK2;architecture behav of PL_DPSK2 issigna
25、l q:integer range 0 to 3; -分频signal xx:std_logic; -寄存相对码beginprocess(clk,x) -此进程完成相对码到绝对码的转换beginif clkevent and clk=1 then if start=0 then q=0; elsif q=0 then q=1; elsif q=3 then q=0; y=xx xor x; xx=x; -输入信号x与前一输入信号xx进行异或 else q=q+1; end if;end if;end process;end behav;五、 仿真结果与说明1、选择译码器的仿真波形如下图所示对应
26、于不同的输入选择信号,输出信号的特定输出高电平,其余为低电平。2、2ASK调制器的仿真波形如下图所示当start信号为高电平时,进行ASK调制;载波信号f通过系统时钟进行4分频获得。3、2ASK解调器的仿真波形如下图所示当start信号为高电平时,进行ASK解调;在q=11时,m清零;根据m的大小,进行对输出基带信号y的电平的判决;在q为其他时,m计xx的脉冲数;输出的基带信号y滞后输入的调制信号x十个时钟周期。4、2FSK调制器的仿真波形如下图所示当start信号为高电平时,进行FSK调制;载波f1,f2分别是通过对clk信号进行12分频和2分频得到的;基带码长是载波信号f1的两个周期,载波
27、信号f2的六个周期;输出的调制信号则在时间上滞后于载波信号一个时钟周期,滞后于输入时钟脉冲两个周期。5、2FSK解调器的仿真波形如下图所示 当start信号为高电平时,进行FSK解调;当q=11时,m清零;当q=10时,根据m的大小,进行对输出基带信号y的电平判决;当q为其他值是,计数器m记下xx的脉冲数;输出信号y滞后于输入信号x十个时钟周期。 6、2CPSK调制器的仿真波形如下图所示 当start信号为高电平时,进行CPSK调制;载波信号f1、f2是通过输入时钟脉冲clk 分频得到的,且滞后输入时钟一个时钟周期;调制输出信号y滞后载波一个时钟周期,滞后输入时钟两个时钟周期。 7、2CPSK解调器的仿真波形如下图所示当start信号为高电平时,进行CPSK解调;当q=0时,根据x的电平来进行判决;输出信号y滞后输入信号x一个时钟周期。8、2DPSK调制器绝对码转换为相对码的仿真波形如下图所示当q=0时,输出信号y是输入信号x与中间寄存信号xx异或,输出信号y滞后于输入信号x一个时钟周期。9、2DPSK解调器相对码转换为绝对码的仿真波形如下图所示当q=3时,输出信号y是信号x与xx的异或;输出信号y滞后于输入信号x 一个基带码长即4个输入时钟周期。
限制150内