DQPSK调制解调设计VHDL代码Quartus仿真

名称:DQPSK调制解调设计VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

DQPSK调制解调设计

1、主要包括载波产生模块、调制模块、解调模块

2、调制信号使用m序列产生,然后进行差分编码

3、对差分编码后的数据进行DQPSK调制

4、对DQPSK调制信号进行解调,输出解调后的2bit数据

1. 工程文件

2. 程序文件

3. 程序编译

4. 程序RTL图

5. Testbench

6. 仿真图

6.1 调制模块

6.2 载波产生模块

6.3 解调模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--DPSK解调模块
ENTITY QPSK_demodu IS
   PORT (
      clk       : IN STD_LOGIC;
      rst       : IN STD_LOGIC;
      qout      : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--调制波
      cos_wave  : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--本地载波
      sin_wave  : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--本地载波
      data      : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)--解调输出
   );
END QPSK_demodu;
ARCHITECTURE trans OF QPSK_demodu IS
   
   SIGNAL cos_mul        : STD_LOGIC_VECTOR(15 DOWNTO 0);
   SIGNAL sin_mul        : STD_LOGIC_VECTOR(15 DOWNTO 0);
   
   SIGNAL filter_cos_cnt : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000";
   SIGNAL filter_sin_cnt : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000";
   SIGNAL demodulate_a   : STD_LOGIC := '0';
   SIGNAL demodulate_b   : STD_LOGIC := '0';
   
   SIGNAL cnt            : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   
   SIGNAL a_buf          : STD_LOGIC := '0';
   SIGNAL b_buf          : STD_LOGIC := '0';
   SIGNAL a_buf2         : STD_LOGIC := '0';
   SIGNAL b_buf2         : STD_LOGIC := '0';
   SIGNAL D_a            : STD_LOGIC;
   SIGNAL D_b            : STD_LOGIC;
   
   SIGNAL data_buf       : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
   cos_mul <= (cos_wave * qout);--调制波形与本地载波相乘
   sin_mul <= (sin_wave * qout);--调制波形与本地载波相乘
   
--采用计数器滤波,检测到cos_mul(15) = '1'后计数到011001
PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
         IF (rst = '1') THEN
            filter_cos_cnt <= "000000";
         ELSIF (cos_mul(15) = '1') THEN
            filter_cos_cnt <= "000001";
         ELSIF (filter_cos_cnt = "000000") THEN
            filter_cos_cnt <= "000000";
         ELSIF (filter_cos_cnt >= "011001") THEN
            filter_cos_cnt <= "000000";
         ELSE
            filter_cos_cnt <= filter_cos_cnt + "000001";
         END IF;
      END IF;
   END PROCESS;
   
   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
         IF (filter_cos_cnt = "000000") THEN
            demodulate_a <= '0';--滤波输出解调的a路信号
         ELSE
            demodulate_a <= '1';--滤波输出解调的a路信号
         END IF;
      END IF;
   END PROCESS;
   
--采用计数器滤波,检测到sin_mul(15) = '1'后计数到011001
   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
         IF (rst = '1') THEN
            filter_sin_cnt <= "000000";
         ELSIF (sin_mul(15) = '1') THEN
            filter_sin_cnt <= "000001";
         ELSIF (filter_sin_cnt = "000000") THEN
            filter_sin_cnt <= "000000";
         ELSIF (filter_sin_cnt >= "011001") THEN
            filter_sin_cnt <= "000000";
         ELSE
            filter_sin_cnt <= filter_sin_cnt + "000001";
         END IF;
      END IF;
   END PROCESS;
源代码

点击下方的公众号卡片获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值