基于FPGA的信号发生器(三角波、方波、正弦波)

这篇具有很好参考价值的文章主要介绍了基于FPGA的信号发生器(三角波、方波、正弦波)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

DDS实现原理

DDS整体设计框图​

Quartus II 仿真​

modelsim仿真

顶层代码


DDS实现原理

DDS(Direct Digital  Frequency Synthesizer)直接数字频率合成器,也可叫DDFS。 

  • DDS是从相位的概念直接合成所需波形的一种频率合成技术。 
  • 不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。 
  • 主要构成: 

    内部:相位累加器,正弦查找表 

    外围:DAC,LPF(低通滤波器)

    工作过程

    1、将存于ROM中的数字波形,经DAC,形成模拟量波形。 

    2、改变寻址的步长来改变输出信号的频率。 步长即为对数字波形查表的相位增量。由累加器对相位增量进行累加,累加器的值作为查表地址。 

    3、DAC输出的阶梯形波形,经低通滤波,成为模拟波形

  • 基于fpgad的简易三角波发生器,fpga开发

DDS整体设计框图Quartus II 仿真

modelsim仿真图

基于fpgad的简易三角波发生器,fpga开发

基于fpgad的简易三角波发生器,fpga开发

基于fpgad的简易三角波发生器,fpga开发

顶层代码

(代码较长,完整工程免费获取请关注公众号:FPGA设计苑)文章来源地址https://www.toymoban.com/news/detail-762165.html

module DDS(
			clk,                                    //时钟输入
			dds_data_out,                           //DDS数据输出
			set_waveform,                           //设置输出的波形
			set_f,                                  //设置频率
			set_a,                                  //设置幅值
			set_p                                   //设置频率
          );
input         clk;
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'b000_0000_0000;//初始化,高位置低
assign f32_bus[20:0]=set_f_reg;    //低位可以设置DDS的输出频率
/*********************元件例化************************************/
       adder_32 u1(.data1(f32_bus),.data2(reg32_out),.sum(reg32_in));
       reg32    u2(.clk(clk),.data_in(reg32_in),.data_out(reg32_out));
       adder_10 u7(.data1(set_p),.data2(reg32_out[31:23]),.sum(reg10_in));
       reg_10   u8(.clk(clk),.data_in(reg10_in),.data_out(reg10_out_address));
/*****************波形选择*******************************************/
       sin_rom  u3(.address(reg10_out_address),.clock(clk),.q(sin_data));//正弦
       tri_rom  u4(.address(reg10_out_address),.clock(clk),.q(tri_data));
       squ_rom  u5(.address(reg10_out_address),.clock(clk),.q(squ_data));
//       saw_rom  u6(.address(reg10_out_address),.clock(clk),.q(saw_data));
/***********************设置波形和设置频率***************************/
    always @(set_waveform,sin_data,tri_data,squ_data)
      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;//设置范围为100Hz到20KHz
               end
          2'b10:
               begin
                 dds_data_reg<=squ_data;//方波
                 set_f_reg<=set_f;//设置范围为100Hz到20KHz
               end
        default:
               begin
                  dds_data_reg<=sin_data;//正弦波
                  set_f_reg<=set_f;//设置范围为100Hz到20KHz
               end
        endcase;
      end 
/***********************设置电压幅值***************************/
assign dds_data_out=dds_data_reg*set_a/10;//设置电压幅值
endmodule





到了这里,关于基于FPGA的信号发生器(三角波、方波、正弦波)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的DDS原理信号发生器设计 quartusII 9.1平台 Verilog HDL语言编程 可产生正弦波

    基于FPGA的DDS原理信号发生器设计 quartusII 9.1平台 Verilog HDL语言编程  可产生正弦波、方波、锯齿波以及三角波   频率幅度可调节   代码+原理图 在现代电子技术领域,针对各种应用的信号发生器是一种非常核心的设备,而基于现场可编程逻辑门阵列(FPGA)的直接数字合成(

    2024年04月27日
    浏览(44)
  • 可变频率正弦信号发生器的FPGA实现(Quartus)

    实现平台:Quartus17.1、MATLAB2021a和Modelsim SE-64 10.4 1. 产生一个完整周期的正弦波信号,并保存为*.mif文件; 2. 设计一个ROM,将正弦波信号文件初始化如该ROM中; 3. 设计一正弦波信号发生器,按照读取步长,产生频率可变的正弦波信号; 4.编写测试文件,通过modelsim查看波形。 (

    2024年01月16日
    浏览(34)
  • 基于51单片机的波形发生器(PCF8591、正弦波、三角波、锯齿波、方波)

            正弦波、三角波、锯齿波和方波是我们平时最常见的四种波形,那么学会使用单片机产生这四种波就很重要了。但学过51单片机就知道,其IO引脚只能输出高电平或低电平,单靠其引脚生成以上波形,好像不大可能,因此我们需要配合使用另一个很重要的芯片,DAC芯片

    2024年02月09日
    浏览(37)
  • 正弦信号发生器设计——VHDL

    (1)学习并掌握Quartus II的使用方法 (2)学习简单时序电路的设计和硬件测试。 (3)学习使用VHDL 语言方法进行逻辑设计输入 (4)进一步熟悉QuartusⅡ及其 LPM_ROM 与 FPGA硬件资源的使用方法,学习较复杂的数字系统设计方法,并在实验开发系统上熟悉运行输入及仿真步骤原理

    2024年02月02日
    浏览(34)
  • 基于FPGA的信号发生器(四)

         基于FPGA的信号发生器的硬件电路通常需要以下组件: FPGA芯片:FPGA芯片是这个电路的核心部件,用于实现信号生成算法和控制逻辑。选择合适规模的FPGA芯片以满足你的信号发生器的性能和功能需求。 时钟源:信号发生器需要一个稳定的时钟源,以确定信号的频率和采

    2024年04月14日
    浏览(38)
  • 基于FPGA的DDS信号发生器

        两个礼拜前就像写这个文档了,但是一直鸽到现在,主要是人摆了。还有个技术上的原因是,我想用串口屏显示波形,在串口调试助手上返回的数据是对的,但是发到串口屏上啥反应没有,人就很麻,如果这个弄不出来,前面 HMI 串口屏的工程、人机交互界面就白做了。

    2024年02月06日
    浏览(33)
  • EDA实验-----正弦信号发生器的设计(Quartus II )

    目录 一、实验目的 二、实验仪器 三、实验原理 四、实验内容 五、实验步骤 六、注意事项 七、实验过程(操作过程) 1.定制LPM_ROM模块 2.定制LPM_ROM元件  3.计数器定制 4.创建锁相环 5.作出电路图 6.顶层设计仿真 学习使用Verilog设计波形发生器。 掌握LPM_ROM在波形发生器设计中

    2024年02月04日
    浏览(37)
  • 基于FPGA的简易 DDS 信号发生器的设计

    DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。作为设计人员,我们

    2024年02月07日
    浏览(37)
  • FPGA学习任意波函数信号发生器的设计(基于quartus II13.0)

    平台: quartus II 13.0 仿真:signal tap II 语言:VHDL 方式:原理图bdf输入 芯片:Cyclone IV E: EP4CE6E22C8 设计一任意波函数信号发生器,具备以下两功能: ①能输出标准正弦波波形。 ②能输出任意函数波形。 首先明确实验用到的宏模块操作是在tool——MeGaWizard Plug-In Manager中(如下图)

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包