软件:Quartus
语言:VHDL
代码功能:
简易信号发生器的设计
设备及软件:装有 Quartus II软件完成设计数字系统的计算机
目的:
1.了解系统相关功能电路图与印刷电路图的设计、绘制,并完成相关流程的设计以及硬件描述语言VHDL程序的编写、设计与综合和调试仿真工作。
2.学会 Quartus II软件完成设计系统的设计与综合。
3.握该数字电路系统的仿直调试,分析系统功能实现的可行性等。
任务:本课程设计主要是利用VHDL语言设计一个信号发生器,要求实现以下功能:
1.根据输入信号的选择可以产生周期性输出方波、三角波、正弦波、阶梯波四种波形信号。
2.可以在一定范围内调整频率。
3.如果有祭件,可将波形数据送入DA转换器,将数字信号转换为横拟信号输出,用示波器测试DA转换器的输出,可以现测到4种信号的输出。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
ROM IP核
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
上图中,wave_select选择波形类型,01输出sin,10输出方波,11输出三角波,00阶梯波。
Frequency控制波形频率
相位累加器模块
相位累加器,控制读ROM的地址,图上可以看到地址累加
波形选择模块
01输出sin,10输出方波,11输出三角波,00阶梯波
正弦波ROM模块
存储了正弦波波形
三角波ROM模块
存储了三角波波形
方波ROM模块
存储了方波波形
阶梯波ROM模块
存储了阶梯波波形
按键控制频率信号模块
通过按键控制frequency信号,从而进制波形频率
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; USE?ieee.std_logic_unsigned.all; --DDS频率等于clk*N/2^13,clk为输入时钟,N为频率控制字frequency;2^13是因为ROM里面存储了8192个点,相位累加器位宽为13位 ENTITY?DDS_top?IS ???PORT?( ??????clk_in??????:?IN?STD_LOGIC;--时钟 rst_p:?IN?STD_LOGIC;--复位 ??????wave_select??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);--01输出sin,10输出方波,11输出三角波,00阶梯波 ??????frequency_key????:?IN?STD_LOGIC;--频率控制按键 wave?????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--输出波形 ???); END?DDS_top; ARCHITECTURE?behave?OF?DDS_top?IS --例化模块 --波形选择模块 ???COMPONENT?wave_sel?IS ??????PORT?( ?????????clk_in??????:?IN?STD_LOGIC; ?????????wave_select??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????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); douta_juchi??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????wave?????????:?OUT?STD_LOGIC_VECTOR(7?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; --ROM表 COMPONENT?juchi_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;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1050
588