• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的波形信号发生器设计Verilog代码Quartus仿真

07/23 09:11
657
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2405131G303O2.doc

共1个文件

名称:基于FPGA的波形信号发生器设计Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:

利用FPGA可以使用软件编程的方法设计硬件电路,可以方便调整波形的优点,设计一种能够提供正弦波方波三角波,脉冲等多种波形的多功能信号发生器。它是一种常用的信号源,可以广泛应用电子测量、自动控制、电子电路等领域。

该设计为多功能信号发生器的设计,主要需要实现以下功能:

基于FPGA设计信号产生模块,可生成幅度可调,频率可调的正弦波,方波、三角波;之后可对波形进行选择,即选取某种波形输出。设计输出脉冲波,输出模式可分为连续触发和单次手动触发。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

ROM IP

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

整体仿真图

相位累加器模块

正弦波ROM模块

方波ROM模块

三角波ROM模块

波形选择模块

工程文件

程序编译

RTL图

脉冲波模块

Testbench

仿真图

部分代码展示:

`timescale?1ns?/?1ps
//输出频率f=clk_50M*frequency/2^10
//amplitude控制幅值,frequency控制频率
module?DDS_top(
????input?clk_50M,
?input?switch,//脉冲波控制信号,切换连续波和脉冲波
????input?[1:0]?wave_select,//01输出sin,10输出方波,11输出三角波
????input?[7:0]?frequency,//频率控制字,控制输出波形频率,值越大,频率越大
?input?[7:0]?amplitude,//幅值控制,值越大,幅值越大
????output?[15:0]?wave,//输出波形
?output?pulse_wave//脉冲波
????);
wire?[9:0]?addra;
wire?[7:0]?douta_fangbo;
wire?[7:0]?douta_sanjiao;
wire?[7:0]?douta_sin;
//方波ROM
fangbo_ROM?i_fangbo_ROM?(
??????.clock(clk_50M),????//?input?wire?clka
??????.address(addra),??//?input?wire?[9?:?0]?addra
??????.q(douta_fangbo)??//?output?wire?[7?:?0]?douta
????);
//三角波ROM
sanjiao_ROM?i_sanjiao_ROM?(
??.clock(clk_50M),????//?input?wire?clka
??.address(addra),??//?input?wire?[9?:?0]?addra
??.q(douta_sanjiao)??//?output?wire?[7?:?0]?douta
);
//sin波ROM
sin_ROM?i_sin_ROM?(
??.clock(clk_50M),????//?input?wire?clka
??.address(addra),??//?input?wire?[9?:?0]?addra
??.q(douta_sin)??//?output?wire?[7?:?0]?douta
);
//相位累加器
Frequency_ctrl?i_Frequency_ctrl(
.?clk_50M(clk_50M),
.?frequency(frequency),//频率控制字
.?addra(addra)//输出地址
????);
//波形选择控制
wire?[7:0]?wave_rom;
wave_sel?i_wave_sel(
.?clk_50M(clk_50M),
.?wave_select(wave_select),//01输出sin,10输出方波,11输出三角波
.?douta_fangbo(douta_fangbo),//方波
.?douta_sanjiao(douta_sanjiao),//三角
.?douta_sin(douta_sin),????//正弦???
.?wave(wave_rom)//输出波形????
????);
?
//脉冲发生器
pulse_generate?i_pulse_generate(
.?clk_50M(clk_50M),//时钟
.?switch(switch),//脉冲波控制信号,切换连续触发和单次手动触发
.?frequency(frequency),//频率控制字
.?pulse_wave(pulse_wave)//脉冲波
);
?
//输出波形幅值控制
assign?wave=amplitude*wave_rom;
endmodule

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=736

  • 2-2405131G303O2.doc
    下载

相关推荐