基于FPGA的dds发生器与lcd显示

链接:https://pan.baidu.com/s/1ehgg5bm-ir3oE2ggLflZ1A
提取码:1234

功能说明
采用FPGA实现正弦波、三角波、矩形波生成,
频率分别为100Hz~25k,实现频率步进调节;
输出信号幅度为0V~3.3V,并能步进调节;
实时显示波形类型、频率值、输出电压有效值等。

原理图设计:
在这里插入图片描述

部分代码:


module DDS(
			clk,
			reset,
			dds_data_out,
			set_waveform,
			set_f,
			set_a,
			set_p
          );
input         clk;//时钟输入
input         reset;//复位输入
input  [1:0]  set_waveform;
input  [20:0] set_f;
input  [4:0]  set_a;
input  [8:0]  set_p;
output [9:0]  dds_data_out;

wire          clk;
wire   [1:0]  set_waveform;
wire   [20:0] set_f;
wire   [4:0]  set_a;
wire   [9:0]  set_p;
wire   [9:0]  dds_data_out;
/**************连接线***************/
wire   [31:0] f32_bus;//AC频率控制字输入
wire   [31:0] reg32_out;//32位寄存器输出
wire   [31:0] reg32_in;//32位寄存器输入
wire   [8:0]  reg10_in;
wire   [8:0]  reg10_out_address;
/**************缓存寄存器******************/
wire   [9:0]  sin_data;
wire   [9:0]  tri_data;
wire   [9:0]  squ_data;
//wire   [9:0]  saw_data;
reg    [9:0]  dds_data_reg; 
reg    [20:0] set_f_reg;     
/***********************************/
assign f32_bus[31:21]   = 11'd0;//初始化,高位置低
assign f32_bus[20:0]    = set_f_reg;//低位可以设置DDS的输出频率
/*********************元件例化************************************/
       adder_32 adder_32_1(.data1(f32_bus),.data2(reg32_out),.sum(reg32_in));//相位累加器
       reg32    reg32_1(.clk(clk),.data_in(reg32_in),.data_out(reg32_out));//相位累加器
       adder_10 adder_10_1(.data1(set_p),.data2(reg32_out[31:23]),.sum(reg10_in));//
       reg_10   reg_10_1(.clk(clk),.data_in(reg10_in),.data_out(reg10_out_address));//
/*****************波形选择*******************************************/
       sin_rom  sin_rom_1(.address(reg10_out_address),.clock(clk),.q(sin_data));//正弦
       tri_rom  tri_rom_1(.address(reg10_out_address),.clock(clk),.q(tri_data));//三角
       squ_rom  squ_rom_1(.address(reg10_out_address),.clock(clk),.q(squ_data));//矩形
//       saw_rom  saw_rom_1(.address(reg10_out_address),.clock(clk),.q(saw_data));
/***********************设置波形和设置频率***************************/
    always @(*)
      begin 
        case (set_waveform)
          2'b00://正弦波
               begin 
                 dds_data_reg <= sin_data; 
                 set_f_reg <= set_f;//设置范围为100Hz到20KHz
               end
          2'b01://三角波
               begin
                 dds_data_reg <= tri_data;
                 set_f_reg <= set_f;//固定为1KHz
               end
          2'b10:
               begin
                 dds_data_reg <= squ_data;//方波
                 set_f_reg <= set_f;//固定为1KHz
               end
        default:
               begin
                  dds_data_reg <= sin_data;//正弦波
                  set_f_reg <= set_f;//设置范围为100Hz到20KHz
               end
        endcase;
      end 
/***********************设置电压幅值***************************/
reg    [19:0] dds_data_r1; 
always @(posedge clk or negedge reset)
begin
    if(!reset)
    begin
        dds_data_r1 <= 20'd0;
    end
    else
    begin
        dds_data_r1 <= dds_data_reg*set_a;
    end
end
assign dds_data_out = dds_data_r1/10;//设置电压幅值
endmodule






  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值