名称:DDS波形发生器并通过DA芯片tlc5620输出波形设计VHDL代码Quartus DE1-SOC开发板(文末获取)
软件:Quartus
语言:VHDL
代码功能:
DDS波形发生器并通过DA芯片tlc5620输出波形
1、使用DDS算法产生波形,可以选择输出方波、正弦波、三角波、矩形波
2、可以控制输出波形的频率
3、将波形通过DA芯片tlc5620输出
本代码已在DE1-SOC开发板验证,DE1-SOC开发板如下,其他开发板可以修改管脚适配:
DDS原理
1. 工程文件
2. 程序文件
ROM IP核
3. 程序编译
4. 管脚分配
5. RTL图
6. Testbench
7. 仿真图
整体仿真图
相位累加器模块
波形选择模块
DA控制模块
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; --DDS频率等于clk*N/2^13,clk为输入时钟50MHz,N为频率控制字frequency;2^13是因为ROM里面存储了8192个点,相位累加器位宽为13位 ENTITY DDS_top IS PORT ( clk_in : IN STD_LOGIC;--时钟 rst : IN STD_LOGIC;--复位 wave_select : IN STD_LOGIC;--波形选择按键,00输出方波,01输出sin,10输出方波(矩形波),11输出三角波 frequency : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率控制字,控制输出波形频率,值越大,频率越大 dac_clk : OUT STD_LOGIC;--DA控制控制接口 dac_data : OUT STD_LOGIC;--DA控制控制接口 dac_load : OUT STD_LOGIC;--DA控制控制接口 dac_ldac : OUT STD_LOGIC --DA控制控制接口 ); END DDS_top; ARCHITECTURE behave OF DDS_top IS --例化模块 --DA控制模块 COMPONENT tlc5620 IS PORT ( clk : IN STD_LOGIC;--时钟 rst : IN STD_LOGIC;--复位 write_n : IN STD_LOGIC;--写使能 wr_data : IN STD_LOGIC_VECTOR(10 DOWNTO 0);--写数据 clk_out : OUT STD_LOGIC;--输出时钟 dac_clk : OUT STD_LOGIC;--DA控制控制接口 dac_data : OUT STD_LOGIC;--DA控制控制接口 dac_load : OUT STD_LOGIC;--DA控制控制接口 dac_ldac : OUT STD_LOGIC --DA控制控制接口 ); END COMPONENT; --波形选择模块 COMPONENT wave_sel IS PORT ( clk_in : IN STD_LOGIC; wave_select : IN STD_LOGIC; douta_fangbo : IN STD_LOGIC_VECTOR(7 DOWNTO 0); douta_sanjiao : IN STD_LOGIC_VECTOR(7 DOWNTO 0); douta_sin : IN STD_LOGIC_VECTOR(7 DOWNTO 0); wave : OUT STD_LOGIC_VECTOR(10 DOWNTO 0) ); END COMPONENT; --相位累加器模块 COMPONENT Frequency_ctrl IS PORT ( clk_in : IN STD_LOGIC; frequency : IN STD_LOGIC_VECTOR(9 DOWNTO 0); addra : OUT STD_LOGIC_VECTOR(12 DOWNTO 0) ); END COMPONENT; --ROM表 COMPONENT sin_ROM IS PORT ( address: IN STD_LOGIC_VECTOR (12 DOWNTO 0); clock: IN STD_LOGIC := '1'; q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT; --ROM表 COMPONENT fangbo_ROM IS PORT ( address: IN STD_LOGIC_VECTOR (12 DOWNTO 0); clock: IN STD_LOGIC := '1'; q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT; --ROM表 COMPONENT sanjiao_ROM IS PORT ( address: IN STD_LOGIC_VECTOR (12 DOWNTO 0); clock: IN STD_LOGIC := '1'; q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT; SIGNAL addra : STD_LOGIC_VECTOR(12 DOWNTO 0); SIGNAL douta_fangbo : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL douta_sanjiao : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL douta_sin : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL wave : STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL clk_out: STD_LOGIC; BEGIN
源代码
点击下方的公众号卡片获取