名称:频率幅值可调波形发生器Verilog代码Quartus仿真(文末获取)
软件:Quartus
语言:Verilog
代码功能:
频率幅值可调波形发生器
1、输出方波;三角波;正弦波;阶梯波
2、可以控制波形频率、幅值
3、可以选择输出哪种波形
4、编写testbench,使用modelsim仿真
1.工程文件
2.程序文件
3.程序编译
4.Testbench
5.Modelsim仿真
整体仿真,不同波形,不同频率,不同幅值
1.幅度变化仿真,以方波为例,幅值根据amplitude_data变化而变化
2.波形切换仿真,正弦波变为锯齿波
3.频率(周期)改变仿真,频率(周期)根据frequency_data变化而变化,下图frequency_data=20周期为13311ns左右
下图frequency_data=40周期为26175ns左右,频率变化了
整体仿真图
部分代码展示:
`timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2015/12/22 14:45:39 // Design Name: // Module Name: wave_generation // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // // module wave_generation( input sys_clk, input sys_rst,//高电平复位 input [1:0] wave_select,//00矩形波;01-三角波;10-正弦波;11-锯齿波 input [7:0] frequency_data,//频率控制信号(该控制字越大频率越低) input [7:0] amplitude_data,//幅度控制 output reg [15:0] wave_data//输出波形 ); wire clk; wire [7:0] triangular_wave; wire [7:0] sawtooth_wave; wire [7:0] square_wave; wire [7:0] sin_wave; //波形产生模块 carrier_wave carrier_wave( . clk(clk), . rst(sys_rst), . triangular_wave(triangular_wave),//三角波 . sawtooth_wave(sawtooth_wave),//阶梯波 . square_wave(square_wave),//矩形波 . sin_wave(sin_wave)//正弦波 ); reg [7:0] clk_cnt=8'd0; always@(posedge sys_clk) if(sys_rst) clk_cnt<=8'd0; else if(clk_cnt==frequency_data)//频率控制frequency_data取值0~255,输出频率最大为50M/32Hz=1562500Hz,最低50M/256/32Hz=6103Hz clk_cnt<=8'd0; else clk_cnt<=clk_cnt+8'd1; assign clk=(clk_cnt==8'd0)?1'b1:1'b0;//通过控制clk来控制输出频率 always@(posedge sys_clk)//00矩形波;01-三角波;10-正弦波;11-锯齿波 case(wave_select)//amplitude_data幅度控制 2'b00:wave_data<=amplitude_data*square_wave; 2'b01:wave_data<=amplitude_data*triangular_wave; 2'b10:wave_data<=amplitude_data*sin_wave; 2'b11:wave_data<=amplitude_data*sawtooth_wave; default:; endcase endmodule
源代码
扫描文章末尾的公众号二维码