微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 基于FPGA的fsk调制解调,求帮助,谢谢各位大哥大姐叔叔阿姨

基于FPGA的fsk调制解调,求帮助,谢谢各位大哥大姐叔叔阿姨

时间:10-02 整理:3721RD 点击:
我用的是quartus9.0
仿真出问题了,输出波形有问题,求解救,很感谢
这是调制模块
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_logic;             --系统时钟
     start   :in std_logic;         --此时开始调制信号
     x     :in std_logic;           --基带信号
     y     :out std_logic
);                                 --调制信号
end PL_FSK;
    architecture behav of PL_FSK is
    signal q1:integer range 0 to 11;      --载波信号f1的,分频计数器
    signal q2:integer range 0 to 3;       --载波信号f2的,分频计数器
    signal f1,f2:std_logic;             --载波信号f1和f2
    begin
    process(clk)       --进程经过对系统时钟clk分频来得到载波f1
    begin
if
clk'event 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 clk'event and clk='1' then
   if start='0' then q2<=0;
   elsif 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
clk'event and clk='1' then
   if x='0' then y<=f1;            --若输入的基带信号x=‘0’时,得到的调制信号y为f1
   else y<=f2;                  --若输入的基带信号x=‘1’时,得到的调制信号y为f2
   end if;
    end if;
    end process;
    end behav;

解调模块:
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 of PL_FSK2 is
    signal q:integer range 0 to 11;           --分频计数器
    signal xx:std_logic;                   --寄存器
    signal m:integer range 0 to 5;           --计数器
    begin
    process(clk)                         --此时对系统时钟进行q分频
    begin
if
  clk'event 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)                         --此进程完成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  xx'event and xx='1'then m<=m+1;  --计xx信号的脉冲的个数
    end if;
    end process;
    end behav;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top