精华内容
下载资源
问答
  • DDS发生器的频率控制字原理和基本结构(二) 在正弦波发生器的verilog实现(一)中已经实现了最基本的功能,这篇文章将主要讲解DDS发生器的频率控制字原理和基本结构。 在这里先给出DDS发生器的结构框图: 下面对...

    DDS发生器的频率控制字原理和基本结构(二)

    正弦波发生器的verilog实现(一)中已经实现了最基本的功能,这篇文章将主要讲解DDS发生器的频率控制字原理和基本结构。

    在这里先给出DDS发生器的结构框图:

    DDS发生器的结构框图

    下面对结构框图的各部分进行解释:

    1. RAM部分:在正弦波发生器的verilog实现(一)部分,我们使用matlab产生了一个周期的正弦波信号,并且在一个周期中采集了256个样点,然后通过导入.coe文件,将这256个样点保存到RAM中,即:RAM中存放的是离散的正弦波信号(一个周期,256个样点),RAM使用的规格是256*8bit;
    2. fc采样时钟:在FPGA中使用的是一个50MHZ的采样时钟,也就是在仿真时,每隔20ns,从RAM中读出一个采样值。
    3. 相位累加寄存器:相位累加器是整个DDS系统的核心,在这里完成相位累加功能。假设使用的是一个N为的寄存器(当我们采集的样点为256个,则可以使用一个8位的寄存器)。每来一个时钟脉冲fc,加法器(位于频率控制字和相位累加器寄存器之间)将频率控制字K和相位累加寄存器输出的结果相加,把相加后的结果送到相位累加寄存器中。相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。对应到我的上一个文章,相位累计寄存器中的值就相当于RAM的地址(addr),通过该地址就可以找到波形的抽样值。
    4. 频率控制字M:频率控制字控制着DDS 所输出的正弦波的频率。为了便于理解,还是对应到前一篇文章,频率控制字就相当于ex_dds模块中给addr所加的步长值,比如我们定义的是addr <= addr + 1'b1,其中,后面的1'b1就可以理解为频率控制字M。

    为了便于理解,我们从FPGA的角度说明。假设使用的FPGA的时钟频率是fc=50MHZ,则每隔20ns从RAM中读出一个采样,而我们在RAM中从放的是离散的正弦波信号,存放了一个周期,一共256个样点。所以,在读取RAM时,读完256个样点所用的时间是固定的(所用时间是256*20ns = 5120ns,单位就不换算了,影响不大),当频率控制字M=1时,即:addr <= addr + 1'b1,则在5120ns内,我们可以输出一个周期的正弦波信号;但是当我们改变频率控制字M=2时,即:addr <= addr + 2'd2,则同样在5120ns内,我们可以输出两个周期的正弦波信号(因为此时addr的变化值是:0,2,4,…,254,当addr第一次到达254时,输出了一个周期的正弦波信号,用时2560ns;接着addr因为溢出,所以又从0开始变化,当第二次到达254时,输出了一个周期的正弦波信号,用时2560ns,所以在5120ns内一共输出了两个周期的正弦波信号);所以通过改变频率控制字M的值,就可以改变DDS输出的正弦波的频率。

    M=1时的仿真结果:可以看到5120ns内输出了一个周期

    M=1时的仿真结果

    M=2时的仿真结果:可以看到5120ns内输出了两个周期

    M=2时的仿真结果

    目标频率 f0

    下面我们推倒DDS 输出的正弦波的频率公式:

    假设采样时钟的频率为fc,频率控制字为M,相位累加寄存器的位宽为n,则相位累加器中的最大值为2^n-1,当超过该值时,相位累加寄存器中的值就会溢出,然后从0开始计数。

    因为采样时钟的频率为fc,频率控制字为M,则每隔1/fc,相位累计寄存器中的值就增加M,所以,在1s内,相位累加寄存器中的值增加的大小为(1/(1/fc))*M = fc * M,又因为寄存器中最大表示的值为2^n-1,所以可以计算出1s内溢出的次数为fc * M / 2^n,因为寄存器中的值从0增加到2^n-1,刚好输出一个周期的正弦波信号。所以,寄存器溢出的次数就是输出正弦波的周期数。

    1s内输出正弦波的周期数就为DDS输出的正弦波的频率,也就是我们的目标频率 f0 = fc * M / 2^n

    比如我们上一篇中,fc = 50Mhz,M = 1,n = 8,所以可以计算出目标频率f0 = 195Mhz;当M = 2时,f0 = 390MhzM = 2刚好是M = 1时目标频率的2倍,

    当已知目标频率,求频率控制字M时,M = f0 * 2^n / fc


    下一篇将介绍DDS发生器的verilog实现

    展开全文
  • FPGA项目:之DDS信号发生器(概括介绍了FPGA设计DDS信号发生...图1 DDS基本结构图 其中相位累加器由 N 位加法器与N 位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反

    FPGA项目:之DDS信号发生器(概括介绍了FPGA设计DDS信号发生器)
    (项目中部分参考了网上FPGA程序设计)
    (适合课程设计参考,程序板级实测好用,需要程序可在底下留言)
    B站对应讲解视频链接

    1. DDS 基本原理
      DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点,广泛应用于通信领域。DDS 的基本结构图如图所示。
      在这里插入图片描述
      图1 DDS基本结构图
      其中相位累加器由 N 位加法器与N 位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。由 D/A 转换器将数字信号转换成模拟信号输出。
      在这里插入图片描述
      图2 DDS原理流程图
      这里相位累加器位数为N 位,相当于把正弦信号在相位上的精度定义为N 位,所以其分辨率为1⁄2^𝑁。
      若DDS 的时钟频率为𝐹𝑐𝑙𝑘,频率控制字fword 为 1,则输出频率为𝐹𝑜𝑢𝑡 =𝐹𝑐𝑙𝑘/2^𝑁 ,这个频率相当于“基频”。若fword 为 B,则输出频率为𝐹𝑜𝑢𝑡 = 𝐵 ×𝐹𝑐𝑙𝑘/2^𝑁 。

    2. DDS设计过程
      在本设计中参考时钟𝐹𝑐𝑙𝑘频率为50 MHz,相位累加器位数N 取24位,频率控制字位数M 取8 位,所设计的系统是通过矩阵键盘来控制双通道正弦信号的幅频相,并且将输出的数据通过SignalTap II来进行实时显示双通道的波形数据。如下图5为本次设计的RTL视图。
      在这里插入图片描述
      图5 系统RTL视图
      通过系统的RTL视图可以看出来,系统主要是通过矩阵模块,幅频相控制模块,以及DDS模块来实现双通道DDS信号发生器。其中具体工作流程为矩阵按键控制模块输出键值给幅频相控制模块,幅频相控制模块在接收到按键值之后就进行幅度,频率和相位的计算,并将实时计算的幅频相传输给DDS发生模块,两个DDS模块输出的双通道数据通过SignalTap II来进行抓取数据波形。

    1. ROM
      首先是设计一个ROM来存储基本的波形数据,如图6所示为建立的ROM的IP核,其中ROM为8位,深度为256,ROM部分将会在DDS模块中进行例化。
      在这里插入图片描述
      图6 ROM的IP核
      ROM中存储基本的波形数据是通过MIF文件来进行初始化的,其中MIF文件中的数据可以自己设置,比如可以是正弦数据也可以是锯齿波数据,如图7所示为建立的ROM的IP核中的MIF文件。
      在这里插入图片描述
      图7 ROM的MIF文件
    2. 矩阵按键模块
      矩阵键盘有两组,共8 根信号线,其中COL 将每一列的四个按键的一端连接起来,而ROW 则将每一行的4 个按键的一端连接起来,通过4 行4 列的8 根信号线,总共能够管理16 个按键,如果没有按键被按下的情况下,使用FPGA 的IO 坚持ROW 信号上的电平,应该默认都是高电平。那我们如何去检测某一个按键被按下,并且还能找到其具体的位置,思路其实并不复杂,假如我们让COL0=0,然后去读取ROW 的值,如果4 个ROW 信号的电平全部为高,则表明当前列并无按键按下,则切换到扫描下一列,再去读取4 个ROW 信号的值,根据读到的ROW 值判断当前是哪一个按键被按下。例如当扫描第三列的时候,即COL=4’b1011 时,检测到ROW=4’b1011,则说明“A”被按下。
      在按键过程中由于要处理消抖以及读取键值等问题,涉及到多个状态,所以采用了状态机进行了设计,这里采用了性能最好的三段式状态机,图8为按键控制模块状态转移图,图9为各个状态。
      在这里插入图片描述
      图8 按键控制模块状态转移图
      在这里插入图片描述
      图9 按键控制模块状态
    3. 幅度、频率和相位控制模块
      幅度、频率和相位控制模块是在按键控制模块之后,接收按键控制模块输出的键值,通过键值来进行幅度、频率和相位的控制。由于需要控制三个参数,而且需要控制两路通道,所以输入的键值需要进行严格的区分,幅度、频率以及相位在计算的时候需要分成多个状态,所以也用到了状态机进行了设计。如下图10所示为CTRL模块的引脚。
      在这里插入图片描述
      图10 CTRL模块引脚
      因为幅度、频率以及相位在计算的时候需要分成很多个状态,所以在CTRL模块也用到了状态机进行了设计,在CTRL模块中也是用到了三段式状态机。如图11所示为CTRL模块的状态机的各个状态。
      在这里插入图片描述
      图11 CTRL模块状态机的各个状态
      图12为CTRL模块的三段式转态机状态转移图。
      在这里插入图片描述
      图12 CTRL模块状态转移图
    4. DDS控制模块
      DDS控制模块的设计就是参考图1来进行设计。由图1可以看出,DDS 主要由相位累加器、同步寄存器、波形数据表构成。根据设计需求,如图13所示为Fword和Pword 的同步寄存器,图14为相位累加器也就是输出ROM地址。
      在这里插入图片描述
      图13 同步寄存器
      在这里插入图片描述
      图14 相位累积器ROM地址
    5. 时序分析
      由于所设计DDS信号发生器需要严格的时钟控制,所以对时序要求很高,必须对时序进行约束,如果不进行约束可能由于设计中存在乘法运算以及除法运算会造成时序的建立时间和保持时间不满足时序条件,也就是时间裕量不满足条件,也就达不到预计的频率,可能会因为这些路径导致错误。所以根据本次设计时钟为50MHz,设计了时序约束,如下图15所示。
      在这里插入图片描述
      图15时序约束
    1. DDS实验验证
      首先对矩阵键盘进行仿真验证,如图16所示为对矩阵键盘的仿真程序,其中对于矩阵的键盘仿真专门写了一个模块,如图17所示为矩阵键盘的仿真数据图。
      在这里插入图片描述
      图16 矩阵键盘模块仿真程序
      在这里插入图片描述
      图17 矩阵键盘模块仿真数据
      然后对矩阵键盘的键值控制模块进行仿真,矩阵键盘的控制模块的目的是为了使频率控制字以及相位控制字还有幅度的输出给DDS模块使用,如图18所示为键值控制模块的程序,图19为仿真数据。
      在这里插入图片描述
      图18 键值控制模块仿真程序
      在这里插入图片描述
      图19键值控制模块仿真波形数据
      然后对所设计的DDS双通道波形数据系统进行了ModelSim仿真,仿真分为了两部分,一部分是专门针对DDS模块进行仿真,还有一部分是对整个设计进行仿真,加入了按键。首先对DDS模块进行了仿真,仿真设计程序以及仿真结果如图20和21所示。
      在这里插入图片描述
      图20 DDS模块仿真程序
      在这里插入图片描述
      图21 DDS模块仿真波形数据
      从仿真结果可以看出,通过在仿真脚本文件中设置了频率和相位这两个参数,仿真出来的波形数据可以完好的展现出来。然后就加入了按键部分,通过模拟按键来进行整个顶层文件的仿真设计。
      如图22所示为顶层仿真的程序设计,图23所示为顶层仿真的结果。
      在这里插入图片描述
      图22 仿真文件中模拟按键的键值
      在这里插入图片描述
      图23 顶层仿真结果
      本次设计不但有仿真而且也搭配了硬件电路进行仿真验证。所采用的芯片为EP4CE6E22C8,并搭配了矩阵键盘,如图24所示为系统的硬件系统。
      在这里插入图片描述
      图24 系统硬件系统
      系统在结果验证时也采用了SignalTap II来抓取双通道DDS输出的正弦波形数据。SignaTap II 逻辑分析仪,用于辅助设计调试过程,提供了用户设计全速运行在FPGA 芯片上时不使用外部I/O 引脚就能检查内部信号状态的解决方案。其与传统的外部物理逻辑分析仪类似,可以在不使用硬件测试设备的前提下,调试正常操作期间的FPGA 设计。如图25为SignalTap II配置时钟。
      在这里插入图片描述
      图25 SignalTap II配置时钟
      如图26为配置数据输出引脚。
      在这里插入图片描述
      图26 SignalTap II配置数据输出
      如图27所示为配置存储深度。
      在这里插入图片描述
      图27 SignalTap II配置数据存储深度
      SignaTap II 逻辑分析仪相当于示波器可以观察数据,在这里实验验证除了通过硬件键盘可以输出幅频相,也可以通过ISSP的源来进行这几个参数的输入。为了更便捷地进行板级调试,Qusrtus Prime 自带的的In system sources and probes editor(ISSP)调试工具,测试过程中可以只用其提供的源,通过In system sources and probes editor(ISSP)调试工具提供的源来设置幅频相这三个参数,如图28所示为使用In system sources and probes editor(ISSP)调试工具来进行设置两个通道的频率和相位数据。
      在这里插入图片描述
      图28 ISSP的源使用
      如图29所示为SignalTap II逻辑分析仪抓取的双通道DDS输出的数据。
      在这里插入图片描述
      图29 SignalTap II抓取ISSP设置的波形数据
      由于本次实验搭配了硬件系统,所以最后进行了实际的板级验证,如图30所示为通过控制按键来控制双通道DDS的输出端来输出可以配置幅度、频率以及相位的正弦波形数据。
      在这里插入图片描述
      图30 运行硬件系统
      通过不同的按键所代表的的含义可以分别设置两个DDS信号发生器通道所输出的正弦信号的幅度、频率以及相位。
      其中按键配置两个DDS信号通道的参数需要一定的顺序,此次设计中先是通过按键键值C、D和E来控制此时要配置是幅度、频率还是相位,键值C是用来选择此时来配置两个通道信号的频率,键值D是用来选择此时是来配置两个通道的相位,最后按键按下E代表此时要进行配置两个通道输出信号的幅值。在选择配置模式之后就依次对两个通道的参数进行顺序设计,配置顺序是先按下A键,然后输入需要配置的参数,然后再输入B键,代表了通道1的配置已经完成,接着需要继续按下A键来进行配置通道2输出信号的参数,然后也是输入想要配置的参数,配置完成之后就需要输入B键代表通道2配置数据完成,最后按下F键,代表了这次配置的数据已经完成了,等待下一次参数的配置。
      如图31所示为通过按键的键值来设置双通道DDS信号发生器输出信号的频率以及相位。
      在这里插入图片描述
      图31 SignalTap II抓取按键设置的波形数据
      通过按键可以设置两个DDS信号发生器通道所输出的正弦信号的频率以及相位,如图32所示为通过按键的键值来设置两个通道的幅度、频率和相位的参数。
      在这里插入图片描述
      图32 SignalTap II抓取按键设置的波形数据
      到这里双通道幅频相可调DDS 信号发生器的实验验证就完成了,分别通过ModelSim仿真、ISSP设置参数通过SignalTap II抓取按键设置的波形数据以及最后上板验证,直接通过按键来设置幅度、频率和相位参数来用SignalTap II抓取按键设置的波形数据。
      最后验证能运行的最低和最高频率问题:
      最高频率:
      正弦信号输出的最大频率问题和一个周期有多少个采样点被输出有很大关系,为了不使波形失真,输出7个采样点的话大致不会使波形失真。7个采样点就是7
      2ns=14ns(本次设计系统时钟最高可以跑到90多M,如图15时序约束所示,通过优化程序也可以更高,这里默认硬件外设50MHz频率)。也就是大约7MHz频率。
      如图33所示为本次实验通过按键设置运行在7MHz频率下,每个周期采样了7个采样点。
      在这里插入图片描述
      图33 7MHz频率下
      大约采集了7个采样点,波形不会失真,如果再提高频率每个周期采集到的采样点就会更少,就会失真,所以是8位ROM查找(系统时钟50MHz)条件下,系统最高可以跑到7MHz。
      如果想要提高频率一个方法是提高系统时钟,这样就可以把频率提高。通过提高系统时钟,假如在本次实验中不考虑外部的50MHz晶振,程序是可以跑到90MHz(如图15时序分析),那么一个周期采样七个点,频率大致就是将近14MHz。如果此程序继续提高频率则需要继续优化,提高系统能运行的最高频率。
      最低频率:
      最低运行频率一个取决因素是根据系统时钟,还有一个是根据频率控制字位数。例如本次设计是24位的频率控制字,如果在50MHz系统时钟下,则系统输出波形数据最低运行频率为50MHz/(2^24)=2.98Hz。如图34所示为10KHz下的波形,因为再低的话FPGA资源有限,不能将完整的波形存储显示,因此用10KHz来进行显示。
      在这里插入图片描述
      图34 10KHz频率下
      如果想要运行更低的频率则可以使用更多位数的频率控制字和更低的系统时钟。例如频率控制字32位,系统时钟还是50MHz,则最低频率为50MHz/(2^32)=0.01161Hz。
      综上所述,本次硬件设计在固定了系统外部时钟为50MHz(本身程序是可以跑到90MHz),频率控制字为24位条件下,输出波形的最高频率大约为7MHz,最低频率约为2.98Hz。

    后期设计了双通道的DA模块(可以打板自己焊接制作,比网上买的实惠太多了,想要pcb文件联系博主),其中使用了双通道14位/125Msps的AD9767,实际测试可以输出10MHz的正弦信号,实物图如图所示(其中两根杜邦线是调试的时候的测试线):
    在这里插入图片描述如图所示产生双路的正弦信号:
    在这里插入图片描述

    详细资料请咨询QQ:2859340499
    详细资料请咨询QQ:2859340499
    详细资料请咨询QQ:2859340499

    展开全文
  • DDS原理与实现

    2021-02-09 11:28:02
    一、DDS基本原理 DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于...

    一、DDS基本原理

    DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。
    DDS 的基本结构图如图所示:
    DDS基本结构图
    由图可以看出,DDS主要由相位累加器相位调制器波形数据表以及 D/A 转换器构成。
    其中相位累加器由 N 位加法器与 N 位寄存器构成。每个时钟周期的时钟上升沿,加法器就将频率控制字累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
    相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是DDS输出的信号频率。相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出数据送到D/A转换器,由D/A转换器将数字信号转换成模拟信号输出。

    DDS 信号流程示意图如图所示:
    DDS 信号流程示意图
    这里相位累加器位数为N位(N的取值范围实际应用中一般为24~32),相当于把正弦信号在相位上的精度定义为N位,所以其分辨率为1/2N
    若DDS的时钟频率为Fclk,频率控制字fword为1,则输出频率为Fout=Fclk/2N,这个频率相当于“基频”。若fword为B,则输出频率为Fout= B×Fclk/2N
    从上式分析可得,当系统输入时钟频率Fclk不变时,输出信号频率由频率控制字B所决定,由上式可得:B=2N×Fout/Fclk。其中B为频率字且只能取整数。为了合理控制ROM的容量,此处选取ROM查询的地址时,可以采用截断式,即只取32位累加器的高M位。这里相位寄存器输出的位数一般取10~16 位。

    一个完整周期的正弦信号的波形总共有 33 个采样点,其中第 1 点和第
    33 点的值相同,第 33 点为下一个周期的起始点,因此,实际一个周期为 32 个采样点在这里插入图片描述
    若DAC芯片每1ms完成一次转换,则输出一个完整的正弦波形需要32ms,输出信号的频率为1000/32Hz。
    如果需要其16ms输出一个完整的波形,则每次输出的需要舍弃一半的点。我们可以选择输出(1、3、5、7……29、31)这些点,因为采用这些点,我们还是能够组成一个完整的周期的正弦信号,而输出时间缩短为一半,即频率提高了一倍,变为1000/16Hz。
    如果需要其64ms输出一个完整的波形,则只需要以此组数据为基础,每2ms 输出一个数据即可,例如第1ms和第2ms输出第一个点,第3ms和第4ms输出第二个点,以此类推,第63ms和第64ms输出第32个点,即可实现周期加倍,即频率减半的效果。使用该组波形数据输出频率为1000/64Hz的信号。

    对于相位的调整,只需要在每个取样点的序号上加上一个偏移量,便可实现相位的控制。例如,上面默认的是第1ms时输出第一个点的数据,假如我们现在在第1ms时从第9个点开始输出,则将相位左移了90°,这就是控制相位的原理。

    二、DDS仿真与调试

    1.制作波形数据存储器

    打开IP Catalog并编辑单口ROM
    在这里插入图片描述
    在这里插入图片描述
    选中包含有正弦信号信息的.mif文件。
    在这里插入图片描述

    2.编写DDS

    module DDS(
    	input Clk,			//系统时钟
    	input Rst_n,		//系统复位
    	input EN,			//DDS模块使能
    	input [31:0]Fword,	//频率控制字
    	input [11:0]Pword,	//相位控制字
    
    	output DA_Clk,		//DA数据输出时钟
    	output [9:0]DA_Data	//D输出输出A
    );
    	
    	reg [31:0]Fre_acc;	
    	reg [11:0]Rom_Addr;
    
    /*---------------相位累加器------------------*/	
    	always @(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		Fre_acc <= 32'd0;
    	else if(!EN)
    		Fre_acc <= 32'd0;	
    	else 
    		Fre_acc <= Fre_acc + Fword;
    
    /*----------生成查找表地址---------------------*/		
    	always @(posedge Clk or negedge Rst_n)
    	if(!Rst_n)
    		Rom_Addr <= 12'd0;
    	else if(!EN)
    		Rom_Addr <= 12'd0;
    	else
    		Rom_Addr <= Fre_acc[31:20] + Pword;	
    
    /*----------例化查找表ROM-------*/		
    	ddsrom ddsrom(
    		.address(Rom_Addr),
    		.clock(Clk),
    		.q(DA_Data)
    	);
    
    /*----------输出DA时钟----------*/	
    	assign DA_Clk = (EN)?Clk:1'b1;
    
    endmodule
    

    3.编写testbench文件

    `timescale 1ns/1ps
    
    module DDS_tb;
    	reg 			Clk;		//系统时钟
    	reg 			Rst_n;	//系统复位
    	reg 			EN;		//DDS模块使能
    	reg [31:0]	Fword;	//频率控制字
    	reg [11:0]	Pword;	//相位控制字
    
    	wire 			DA_Clk;	//DA数据输出时钟
    	wire [9:0]	DA_Data;	//D输出输出A
    	
    	DDS DDS_module(
    		.Clk(Clk),			//系统时钟
    		.Rst_n(Rst_n),		//系统复位
    		.EN(EN),				//DDS模块使能
    		.Fword(Fword),		//频率控制字
    		.Pword(Pword),		//相位控制字
    
    		.DA_Clk(DA_Clk),	//DA数据输出时钟
    		.DA_Data(DA_Data)	//D输出输出A
    	);
    	
    	`define clk_period 20
    
    	initial	Clk <= 1'b1;
    	always #(`clk_period/2) Clk <= ~Clk;
    
    	initial begin
    		Rst_n = 1'b0;
    		EN = 1'b0;
    		Fword = 32'd0;
    		Pword = 12'd0;
    		
    		#(`clk_period*20)
    		Rst_n = 1'b1;
    		#(`clk_period*20)
    		EN = 1'b1;
    		Fword = 32'd5000;
    		#(`clk_period*2000000)
    		$stop;
    	end
    	
    endmodule
    

    4.仿真结果

    在这里插入图片描述
    这样一个DDS模块即设计完成,这里可以自行修改Pword的值进行观察波形相位是否发生相应变化。

    展开全文
  • 文章目录基于FPGA的DDS设计方案1 DDS技术简介2 DDS结构原理2.1 基本结构2.2 基本原理3 基于FPGA的 DDS实现3.1 利用RTL实现DDS3.2 利用Xlinx DDS IP实现4 DDS用途 基于FPGA的DDS设计方案 1 DDS技术简介 随着电子...

    在这里插入图片描述

    The furure belongs to those who believe in the beauty of their dreams

    未来属于那些相信梦想美好的人们



    基于FPGA的DDS设计方案

    1 DDS技术简介

    • 随着电子技术的不断发展,传统的频率合成技术逐渐不能满足人们对于频率转换速度、频率分辨率等方面的追求,直接数字频率合成技术应运而生。

    • 直接数字频率合成技术(DDS) 是把一系列数据量形式的信号通过D/A转换器转换成模拟量形式的信号合成技术。DDS具有很多优点,比如:频率转换快、频率分辨率高、相位连续、低功耗、低成本与控制方便。

    • DDS技术满足了人们对于速度稳定性的需求,但是在一些控制较为复杂的系统中,DDS专用芯片不能很好的贴合要求。利用现场可编程门阵列(FPGA)实现DDS具有很大的灵活性,基本能满足现在通信系统的使用要求。

    2 DDS结构原理

    2.1 基本结构

    DDS基本结构框图主要由参考频率源、相位累加器、ROM查找表、DAC转换器、低通滤波器等构成。
    DDS基本结构框图
    相位累加器以一定的步长做累加, 而波形函数存储在ROM查找表中, 将相位累加器输出的相位值作为地址,寻找存储在ROM查找表中的波形函数的幅度值,从而完成相位到幅值的转换。其中,参考频率源一般是一个晶体振荡器,要求具有高稳定性,用于DDS中各部件之间的同步。

    2.2 基本原理

    DDS Core结构图
    上图为DDS Core结构图,∆θ是相位增量(对应图1中的频率控制字K),B∆θ 为相位累加器的位数,clk是参考时钟(对应图1中的参考频率源),A1、D1构成积分器(相位累加器),θ(n)是相位累加器输出的相位,Q1为量化器,用于将相位累加器位数与查找表地址之间的匹配,ϑ(n)为查找表输入地址,Bϑ(n) 为查找表输入地址位数,T1为查找表。

    下面介绍DDS设计过程中常用到的公式,主要是输出频率公式及其变形。

    1. 输出频率

    fout=fclkθ2Bθ(n)f_{out} = \frac{{f_{clk}}{∆θ}}{2^{B_{θ(n)}}}

    1. 相位增量

    θ=fout2Bθ(n)fclk{∆θ} = \frac{f_{out}2^{B_{θ(n)}}}{f_{clk}}

    1. 频率分辨率

    f=fclk2Bθ(n)∆f = \frac{f_{clk}}{2^{B_{θ(n)}}}

    1. 相位累加器位数

    Bθ(n)=log2(fclkf){B_{θ(n)}} =|{log}_2(\frac{f_{clk}}{∆f})|

    3 基于FPGA的 DDS实现

    For example:

    设计一个参考时钟为100MHz,频率分辨率要求能够达到0.03Hz,输出sin信号频率为5.00000005MHz、查找表地址12位;

    理论分析:

    已知频率分辨率∆f与参考时钟f_clk,带入相位累加器位数公式计算

    B∆θ = 31.634318
    

    由于位数为整数,取整数32,所以实际的频率分辨率为

    ∆f = 0.023283064365386962890625Hz
    

    将其带入相位增量公式计算,取整数

    ∆θ = 21474836694.7483648≈21474836
    

    相位累加器输出32位,而查找表输入地址为12位,取相位累加器高12位作为查找表输入地址

    3.1 利用RTL实现DDS

    使用matlab产生sin⁡(θ)数据,θϵ[0,π],点数为2^12=4096,并保存在FPGA的memory中。

    wid = 12;
    len = 2^wid; 
    amp = 10000;
    t=0:2*pi/len:2*pi - 2*pi/len;
    y = round(sin(t)*amp);
    plot(y);
    

    matlab生成sin信号
    相位累加器就是一个积分器,很容易用FPGA实现。最终FPGA仿真结果如下,clk为参考时钟,phase为相位累加器输出,addr为查找表地址,cos_i、sin_q为信号输出:
    DDS RTL仿真波形

    3.2 利用Xlinx DDS IP实现

    上述已经对DDS理论进行了详细概述,利用Xlinx DDS IP实现上述例子相对容易的多,只需要填入对应的参数信息。
    DDS IP配置界面1
    DDS IP配置界面2
    需要注意的是,输入相位端口S_AXIS_PHASE与输出信号端口M_AXIS_DATA的格式,通过设计界面的Information查看,CHAN_0_POFF为初始相位,没有特殊要求一般设置为0,CHAN_0_PINC为相位增量∆θ。
    数据端口格式
    仿真结果如下图所示:
    DDS IP仿真波形

    4 DDS用途

    DDS用途非常广泛,后续会利用Xlinx DDS IP设计一些有趣的信号,例如线性调频信号、非重复扫描系统等。

    展开全文
  • DDS信号发生器

    2021-01-24 20:43:19
    它主要包括相位累加器、相位调制器、ROM 查找表、D /A 和低通滤波器,基本结构如下所示。 工作原理 ROM查找表: 首先,我们先分析ROM查找表中存储的是什么,我们要做一个信号发生器,那么这个周期信号一定有它的一...
  • DDS标准中有什么?

    2021-01-27 11:33:13
    文章主要介绍了DDS高级数据中心接口取代了以消息为中心的编程和基本技术概念等相关内容。 来自于dds-foundation.org,由火龙果软件Anna译、推荐。 DDS拥有一个活跃而充满活力的社区,不断致力于扩展其适用性。DDS标准...
  •  DDS基本结构包括:相位累加器、正弦查询表、数模转换器(DAC)及低通滤波器等。DDS 原理如图1所示。  图1 中信号输出频率和参考时钟频率的关系表达式为:  其中:fo为输出频率, fosc为参考时钟频率,F
  • 摘 要:本文介绍了一种利用DDS技术实现的变频电源。方法简单可行,调试、维护都很方便,其波形的谐波含量低,频率准确度高,并且能够实现频率连续可调。关键词: DDS;...设计原理及结构 图1为DDS技术的基本结构
  • 介绍了DDS基本原理及DDS芯片的功能特点以及DDS芯片AD9852的结构、特点,并采用PIC单片机控制AD9852,实现了跳频频率合成器。 关键词:DDS 频率分辨率 转换速度 频率合成 PIC单片机 在研制雷达系统时,常常...
  • 介绍了直接数字频率合成(DDS)的基本原理和基于DDS技术的任意波形发生器的结构及工作方式,给出了任意波形发生器各组成电路的设计方案以及DDS通道的FPGA实现方法。
  • 关于DDS的几点理解

    万次阅读 多人点赞 2013-12-19 10:23:09
    DDS的理解关键在于分清相位累加器、ROM查找表和DAC的位数的不同,如果将上述三者的位数混淆的话就很难理解DDS的原理。  直接数字频率合成器DDS(Direct Digital ...DDS基本结构如下图 所示,它主要由相位累加器、
  • 分析了DDS技术的基本原理和基本结构,介绍了一种基于FPGA的DDS信号发生器设计方法。以FPGA芯片EP2C35F672C8为核心器件,辅以必要的模拟电路,在Quartus II9.0平台下实现系统设计的综合与仿真。实验测试表明该信号...
  • 介绍了DDS的发展历史及其两种实现方法的特点,论述了DDS基本原理,并提出一种基于FPGA的DDS信号发生器的设计方法,使DDS信号发生器具有调频、调相的功能,最后对其性能进行了分析。实验表明该系统具有设计合理、...
  • DDS具有分辨率高、转换速度快的优点。在一些需要高频率分辨率、高转换速度的应用场合,尤其...介绍了DDS基本原理及DDS芯片的功能特点以及DDS芯片AD9852的结构、特点,并采用PIC单片机控制AD9852,实现了跳频频率合成器。
  • 随着数字信号处理技术的...首先介绍了DDS技术的基本工作原理和结构,然后用Verilog硬件编程语言实现了基于DDS的信号发生,在此基础上设计了一种基于DDS技术的多路线性调频信号,并给出了其仿真结果,验证了其正确性。
  • DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控...DDS基本结构图如图所示。 ...
  • 0 引言  直接数字式频率合成器... DDS把一系列数字量形式的信号通过数模转换器(DAC)转换成模拟量形式的信号,其基本结构如图1。  DDS由相位累加器、加法器、波形存储器(ROM)、数字乘法器、D/A转换器和低通
  •  DDS基本结构包括:相位累加器、正弦查询表、数模转换器(DAC)及低通滤波器等。DDS 原理如图1所示。  图1 中信号输出频率和参考时钟频率的关系表达式为:  其中:fo为输出频率, fosc为参考时钟频率,F
  • 文章主要介绍了DDS高级数据中心接口取代了以消息为中心的编程和基本技术概念等相关内容。来自于dds-foundation.org,由火龙果软件Anna译、推荐。数据分发服务(DDS)是一个由对象管理组(OMG)发布的以数据为中心的...
  • DDS基本原理和特点出发,介绍一种基于DDS和MCU搭建跨波段的调频发射机的方法,并给出系统的硬件实现结构、软件控制流程及编程实现。采用此方法合成调频信号具有硬件电路简单、载波频率稳定度高、频偏可调等优点...
  • DDS具有分辨率高、转换速度快的优点。在一些需要高频分辨率、设置转换度的应用场合,尤其...介绍了DDS基本原理及DDS芯片功能特点以及DDS芯片AD9852的结构、特点,并采用PIC单片机控制AD9852,实现了跳频频率合成器。
  • 介绍了一种基于陶瓷球栅阵列(CBGA)技术的多通道直接数字合成器(DDS)封装结构设计,提出了一种改进隔离度的CBGA基板实现形式,并利用Ansoft HFSS软件进行了基板隔离度的优化仿真,最后对所提出的设计进行了实物测试...
  • DDS即Direct Digital Synthesizer,中文名称是...基本DDS结构主要由相位累加器、相位调制器、波形ROM查找表和DAC构成。其中相位累加器、相位调制器和波形ROM查找表是DDS结构中的数字部分,具有数控频率合成的功能。
  • 文章介绍了AD9954的基本特点和引脚功能,分析了其内部结构和工作原理,给出了AD9954在高速调制信号系统中的应用方案。  关键词:AD9954 串行操作 RAM 高速调制 1 概述  AD9954是采用先进的DDS技术开发的高...
  • FPGA学习.7——DDS信号发生器

    千次阅读 2021-02-01 11:29:46
    DDS是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。...DDS基本结构主要由相位累加器、相位调制器、波形数据表ROM、D/A转换器等四大结构组成,其中较多设计还会在数
  • 摘 要:本文介绍了一种利用DDS技术实现的变频电源。方法简单可行,调试、维护都很方便,其波形的谐波含量低,频率准确度高,并且能够实现频率连续可调。关键词: DDS;...设计原理及结构 图1为DDS技术的基本结构
  • 提出一种基于数字信号处理器(DSP)和直接数字信号合成器(DDS)技术的高精度扫频信号源的实现方法,着重讨论AD9834型DDS基本工作原理、扫频波信号源的硬件结构和软件流程。
  • DDS原理与AD9852的结构 基本DDS是在高速存储器中放入正弦函数-相位数据表格,经过查表操作,将读出的数据送到高速DAC产生正弦波。常用的可编程DDS系统如图1所示。 DDS系统由频率控制字、相位累加器、...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 143
精华内容 57
关键字:

dds基本结构