多函数信号发生器设计(锯齿波、三角波、正弦波)设计概述:本信号发生器主要基于硬件FPGA和软件QUARTUS软件完成,完成了锯齿波、三角波、正弦波的输出,并可通过按键切换频率(包括按键消抖功能)。设计原理:由于FPGA上无D/A转换模块,因此设计中利用PWM发生模块,通过改变PWM的占空比,PWM输出后经过二级RC低通波电路转换为电压幅值正比于占空比的模拟电压,所以只需输出相应的pwm,即可获得相应的波形。系统分析和程序设计:本信号发生器采用构造体结构描述的基本框架,其中包括顶层文件和各个子器件。1、顶层文件层序如下主要程序如下(注:实体名必须与工程名一致)libraryieee;useieee.std_logic_1164.all;entityzzzisport(clk,key:instd_logic;guan:outstd_logic_vector(3downto0);hex:outstd_logic_vector(6downto0);q:outstd_logic);endentity;architecturekkkofzzzis--锯齿波器件(频率不同)componentjuisport(clk1:instd_logic;guan:outstd_logic_vector(3downto0);hex0:outstd_logic_vector(6downto0);q1:outstd_logic);endcomponent;--三角波器件componentsan1isport(clk8:instd_logic;guan:outstd_logic_vector(3downto0);hex0:outstd_logic_vector(6downto0);--b:ininteger;q8:outstd_logic);endcomponent;--正弦波器件componentzhisport(clk3:instd_logic;guan:outstd_logic_vector(3downto0);hex0:outstd_logic_vector(6downto0);q3:outstd_logic);endcomponent;--按键器件componentanisport(clk4,key:instd_logic;b:outinteger);endcomponent;--输出波形定义的型号变量signalout2:std_logic;signalout3:std_logic;signalout4:std_logic;signalout5:std_logic;signalout6:std_logic;signalout7:std_logic;--返回数码管状态数据signalhex0:std_logic_vector(6downto0);signalhex1:std_logic_vector(6downto0);signalhex2:std_logic_vector(6downto0);signalhex3:std_logic_vector(6downto0);signalhex4:std_logic_vector(6downto0);signalhex5:std_logic_vector(6downto0);--各个输出波形返回数码管状态数据signalguan0:std_logic_vector(3downto0);signalguan1:std_logic_vector(3downto0);signalguan2:std_logic_vector(3downto0);signalguan3:std_logic_vector(3downto0);signalguan4:std_logic_vector(3downto0);signalguan5:std_logic_vector(3downto0);endarchitecturekkk;仿真和实验结果:(由于三角波和锯齿波频率较低所以效果有点闪烁)使用说明:仿真步骤:1、新建vwf文件2、双击此空白处3、4、点击nodefider5、点击list即可找到信号6、点击ok再运行即可构造体结构描述基本框架设置:1、首先新建vhdl文件再设置一个vhdl文件为顶层文件,若需要其他子器件可新建多个子vhdl文件右键然后setastop-levelentity即可将vhdl文件设置为顶层文件,一个工程只能有一个顶层文件