软件: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
1200