名称:基于DDS的扫频仪设计VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
基于DDS的扫频仪设计
1、使用DDS原理,控制正弦波频率从低到高扫描
2、可以控制输出信号的幅值
3、可以控制扫描的时间间隔
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
频率调整
testbench
仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY Sweep_frequency IS PORT ( clk : IN STD_LOGIC;--时钟 time_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--时间间隔 phase_data : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--相位控制字10bit amplitude_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--幅值控制 frequency_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--频率控制 sin_wave : OUT STD_LOGIC_VECTOR(17 DOWNTO 0)--输出波形 ); END Sweep_frequency; ARCHITECTURE behavioral OF Sweep_frequency IS COMPONENT sin_ROM IS PORT ( address: IN STD_LOGIC_VECTOR (9 DOWNTO 0); clock: IN STD_LOGIC := '1'; q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END COMPONENT; COMPONENT phase_crtl IS PORT ( clk : IN STD_LOGIC; freq_out : IN STD_LOGIC_VECTOR(9 DOWNTO 0); phase_data : IN STD_LOGIC_VECTOR(9 DOWNTO 0); address : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; COMPONENT time_ctrl IS PORT ( clk : IN STD_LOGIC; time_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0); frequency_data: IN STD_LOGIC_VECTOR(7 DOWNTO 0);--频率控制 freq_data : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; COMPONENT Freq_sum IS PORT ( clk : IN STD_LOGIC; freq_data : IN STD_LOGIC_VECTOR(9 DOWNTO 0); freq_out : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; SIGNAL freq_data : STD_LOGIC_VECTOR(9 DOWNTO 0);--频率控制字10bit SIGNAL address : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL freq_out : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL q : STD_LOGIC_VECTOR(9 DOWNTO 0);--ROM输出波形 BEGIN --sin存储Rom表 i_sin_ROM : sin_ROM PORT MAP ( address => address,--查找表地址 clock => clk,--时钟 q => q--输出波形 ); --相位累加器 i_Freq_sum : Freq_sum PORT MAP ( clk => clk, freq_data => freq_data,--频率控制字10bit freq_out => freq_out--累加器输出 ); --扫频控制 i_time_ctrl : time_ctrl PORT MAP ( clk => clk,--时钟 time_data => time_data,--时间间隔 frequency_data => frequency_data,--频率控制 freq_data => freq_data--频率控制字10bit ); --初相位调整 i_phase_crtl : phase_crtl PORT MAP ( clk => clk, freq_out => freq_out,--相位累加器输出 phase_data => phase_data,--相位控制字10bit address => address--查找表地址 ); sin_wave <= amplitude_data * q;--输出最终波形 END behavioral;
源代码
点击下方的公众号卡片获取