DQPSK调制解调设计VHDL代码Quartus仿真
名称:DQPSK调制解调设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
DQPSK调制解调设计
1、主要包括载波产生模块、调制模块、解调模块
2、调制信号使用m序列产生,然后进行差分编码
3、对差分编码后的数据进行DQPSK调制
4、对DQPSK调制信号进行解调,输出解调后的2bit数据
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
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;
代码文件(付费下载):
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DQPSK调制解调设计VHDL代码Quartus仿真
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DQPSK调制解调设计VHDL代码Quartus仿真
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm