名称:DDS波形发生器并通过DA芯片tlc5620输出波形设计VHDL代码Quartus? DE1-SOC开发板
软件:Quartus
语言:VHDL
代码功能:
DDS波形发生器并通过DA芯片tlc5620输出波形
1、使用DDS算法产生波形,可以选择输出方波、正弦波、三角波、矩形波
2、可以控制输出波形的频率
3、将波形通过DA芯片tlc5620输出
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在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
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1069
阅读全文
539