DDS基本原理与FPGA实现

这篇具有很好参考价值的文章主要介绍了DDS基本原理与FPGA实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DDS基本原理与FPGA实现

定义:DDS是指DDS信号发生器,采用直接数字频率合成技术。是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域

DDS的经典应用场景:通信系统里调制解调

1.系统结构图和理论

DDS基本原理与FPGA实现

其中相位累加器由N位加法器与N位寄存器构成。每个时钟周期的时钟上升沿,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
相位累加器输出的数据就是合成信号的相位 。相位累加器的溢出频率,就是DDS输出的信号频率相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出数据送到D/A转换器,由 D/A转换器将数字信号转换成模拟信号输出。

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现

频率1000/32 Hz是由计算公式f=1s/T得来的,其中T的单位也是s,输出完整的一个波形需要32个点,每个点输出需要1ms,因此周期T=32×1ms×0.001=0.032s,因此f=1s/0.032=1000/32 Hz

DDS基本原理与FPGA实现

DDS基本原理与FPGA实现

​ 图6.4-5 16个采样点的正弦信号波形

DDS基本原理与FPGA实现

公式讲解:

(1)当时钟频率Fclk=1000Hz(即时钟周期为1ms使),取点的间隔是1ms,此时输出频率Fo是多少?

Fo = 1000/32,其中32等于2^N,N=5;

Fo=Fclk/2^N

(2)希望输出的频率翻一倍,即输出的点由32个变为16个,取点间隔变为2

Fo = (1000×2)/(32÷2),其中32等于2^N,N=5;

Fo=Fclk/(2^N/2)

(3)希望输出周期为64ms,即输出的点由32个变为64个,取点间隔变为0.5.

Fo = (1000×2)/(32÷0.5),其中32等于2^N,N=5;

Fo=Fclk/(2^N/0.5)

公式总结:

输出频率由频率控制字Fword(也可以用B来表示)来决定,可以表示为:

Fo=Fclk/(2^N/Fword),也可以写为:Fo=Fclk/(2^N/B)=(Fclk × B)/(2^N)

2.代码实现

`timescale 1ns / 1ps

module DDS_Module(
    Clk,
    Reset_n,
    Fword,  //频率控制字
    Pword,  //相位控制字
    Data    //输出数据
    );
    input Clk;
    input Reset_n;
    input [31:0] Fword;
    input [11:0] Pword;
    output [13:0] Data;
    
    //频率控制字同步寄存器    
    reg [31:1] Fword_r;
    always@(posedge Clk)
        Fword_r <=Fword;
        
     //相位控制字同步寄存器    
    reg [31:1] Pword_r;
    always@(posedge Clk)
        Pword_r <=Pword;
        
     //相位累加器
     reg [31:0] Freq_ACC;
     always@(posedge Clk or negedge Reset_n)
     if(!Reset_n)
        Freq_ACC <= 0;
      else
        Freq_ACC <= Fword_r + Freq_ACC;
      
     //相位累加器与相位控制字的结果输出
     reg [31:0] Freq_ACC_out;
     always@(posedge Clk or negedge Reset_n)
     if(!Reset_n)
          Freq_ACC_out <= 0;
      else
           Freq_ACC_out <= Freq_ACC + Pword_r;
            
       //波形数据表地址 
        wire [11:0] Rom_Addr;
        assign Rom_Addr = Freq_ACC_out[31:20];

blk_mem_gen_0 blk_mem_gen_0_u0 (
  .clka (Clk),
  .addra(Rom_Addr),
  .douta(Data)
);
    
endmodule

补充说明:

相位控制字就是给地址加一个偏置值,因为波形的值存放在rom当中,只需要改变rom的地址就可以改变波形的相位.

测试代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/04/28 20:32:51
// Design Name: 
// Module Name: DSS_Module_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module DSS_Module_tb;
reg      Clk;
reg      Reset_n ;
reg [31:0]  Fword ;
reg [11:0]  Pword ;
wire [13:0] Data;

DDS_Module DDS_Module_u0(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Fword(Fword),  
    .Pword(Pword), 
    .Data(Data)   
    );

initial Clk = 1;
always #10 Clk = ~Clk;
    
initial begin 
    Reset_n =0;
    Pword = 0;
    Fword = 65536;
    #201;
    Reset_n =1;
    #20000000;
    Fword = 65536*1024;
    #20000000;
    Fword = 65536*32;
    #20000000;
    $stop;
end



endmodule

实验结果:

DDS基本原理与FPGA实现

视频链接:22B DDS结构的FPGA实现_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-429506.html

	--晓凡 2023429日于桂林书

到了这里,关于DDS基本原理与FPGA实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于FPGA的DDS开发和实现,可修改输出正弦的频率和相位,包含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.完整算法代码文件 vivado2019.2仿真结果如下: 输出2个不同频率的正弦信号:  修改相位,得到如下所示。      直接数字频率合成技术 (Direct Digital Synthesis)完全不同于我们己经熟悉的直接频率合成技术和锁相环频

    2024年02月04日
    浏览(51)
  • FPGA——DDS

    DDS DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。利用数字方式累加相位,再以相位之和作为地址来查询正弦函数表得到正弦波幅度的离散数字序列,最后经D/A变换得到模拟正弦波输出。在系统时钟一定的情况下,输出频率决定于

    2024年02月08日
    浏览(44)
  • 基于FPGA的DDS设计

    1. 简介         DDS(direct digital synthesizer),直接数字合成器,实现快速频率切换,容易实现频率、相位、幅度的数控调制。DDS在通信领域应用尤为广泛。 2.DDS原理                                                                     图2.1 基本DDS结构         

    2024年02月08日
    浏览(41)
  • FPGA中一些基本概念原理的区分

    在 Verilog 中,wire 和 reg 是两种不同类型的变量,它们有着不同的特性和用途 wire 变量用于连接模块中的输入、输出以及内部信号线。 它主要用于表示连续赋值的逻辑连接,类似于硬件电路中的导线。 wire 变量不能在 always 块或 initial 块中赋值,它们只能通过连续赋值“assig

    2024年02月21日
    浏览(39)
  • 基于FPGA的DDS信号发生器

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

    2024年02月06日
    浏览(49)
  • FPGA之简易DDS信号发生器设计

    设计一个能产生频率可变、相位可调的能产生正弦波、三角波、方波、锯齿波的信号发生器。 DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比,DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,

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

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

    2024年02月07日
    浏览(56)
  • FPGA学习笔记(五):DDS IP核的使用

     1. 打开VIVADO,点击IP Catalog    2.搜索DDS,选择DDS Compiler    3. 配置参数 (1) 设置主频频率 50MHz   (2) 选择sine,并且勾选Has Phase Out(相位输出)    (3) 勾选Output TREDAY  (4) 输入频率    (5) 同上述步骤,再加一个DDS IP核 4. 测试文件   5. 结果展示        

    2024年02月11日
    浏览(58)
  • 具于xilinx FPGA的可动态配置DDS频率控制字的DDS IP核使用例程详解

    本文用于讲解xilinx IP 的dds ip examples(动态配置频率)的功能说明,方便使用者快速上手。 本examples 是月隐编写的针对DDS的使用demo,实现通过vio控制频率控制字来调整DDS的输出频率,为大家演示一个可动态配置DDS频率的例程。 例程的平台: 1) 硬件平台:XC7Z020CLG484-2 2) FP

    2024年02月02日
    浏览(43)
  • DDS信号发生器Verilog波形发生器FPGA

    名称:DDS信号发生器Verilog波形发生器 软件:Quartus 语言:Verilog 要求:  1.可产生正弦波,锯齿波,三角波,方波4种波形,频率可调  2.具有波形选择、起动、停止功能。 代码下载:DDS信号发生器Verilog波形发生器_Verilog/VHDL资源下载 代码网:hdlcode.com 部分代码展示 设计文档

    2024年02月07日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包