名称:简易信号发生器设计VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
简易信号发生器的设计
设备及软件:装有 Quartus I软件完成设计数字系统的计算机
目的:1,了解系统相关功能电路图与印刷电路图的设计、绘制,并完成相关流程的设计以及婕件描述语言
VHDL程序的编写、设计与综合和调试仿真工作
2,学会 Quartus II软件完成设计系统的设计与综合
3.握该数字电路系统的仿直调试,分析系统功能实现的可行性等
任务:本课程设计主要是利用VHDL语言设计一个信号发生器,要求实现以下功能
1,根据输入信号的选择可以产生周期性输出方波、三角波、正弦波、阶梯波四种波形信号
2.可以在一定范围内调整频率
3.如果有祭件,可将波形数据送入DA转换器,将数字信号转换为横拟信号输出,用示波器测试DA
转换器的输出,可以现测到4种信号的输出
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;
源代码
点击下方的公众号卡片获取