0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx DDS IP核的使用和参数配置

Hack电子 来源:Hack电子 2024-10-25 16:54 次阅读

前言

RAM实现一个DDS,从原理上来说很简单,在实际使用的时候,可能没有直接使用官方提供的IP核来的方便。这个博客就记录一下,最近使用到的这个DDS IP。

1 基于相位截断的DDS

DDS IP核的内部的基本结构如下图所示,主要是一个基于相位截断的DDS。在数字信号处理中,经常会使用到DDS,其内部主要有一个相位累加器,一个ROM存储这正弦波的查找表。相位累加器在时钟的作用下对相位进行累加,每次的累加值是通过phase increment 来指定的。累加得到的结果,通过量化器,取其高位,低位舍去,再将这个量化后的相位值,输出到查找表,从查找表中得到最终的波形。

8b3f686e-9041-11ef-a511-92fbcf53809c.png

DDS的最终输出的信号的频率和系统时钟,相位宽度和相位自增量之间满足如下关系:

其中ΔΘ 是相位自增量,BΘ(n)是相位的位宽,也就对应这查找表的深度为2^BΘ(n)

8b5786b0-9041-11ef-a511-92fbcf53809c.png

手册中也给出了一个例子,来举例说明DDS的输出频率和这几个系统参数之间的关系,其中系统时钟120MHz,相位宽度为10bit,相位增量为12,输出的频率通过上面的式子就可以计算出来。

8b7a67de-9041-11ef-a511-92fbcf53809c.png

在实际的工程中,一般希望DDS能够生成不停频率的信号,例如在DDC或者DUC中,希望产生一个高频的载波频率,通常使用DDS来产生一个高频的正弦信号。因此在实际使用的时候更加关注DDS的相位增量。因为通过控制相位增量就能过后产生不同的频率。相位增量的计算公式如下。

8b979a02-9041-11ef-a511-92fbcf53809c.png

下面以一个具体的例子来说明DDS是如何工作的。

2 DDS IP的使用和参数配置

在配置这一TAB,需要设置系统的时钟,这个时钟也就是上面公式当中的参考时钟,然后可以选通道数和模式,这里就保持默认就可以了。

再之后就是期望最终生成的信号的一些参数的设置。可选选择系统参数模式,或者选择硬件参数模式,一般都选择系统参数模式,直接方便。

在系统参数中,动态范围最终对应这输出信号的幅度,其计算公式如下:20lg(Amp),其中AMP就是信号的幅度。比如下图中,动态范围为72,那么他就可以表示幅度为4096的一个正弦信号。[20lg(4096)] = 72dB;

在下面是频率分辨率,对应这最小的频率变化,是由系统时钟和相位深度计算得到的,比如系统时钟40MHz,相位宽度为32bit,那么计算的频率分辨率就是[40*106/(232)] = 0.01。

8bb16ea0-9041-11ef-a511-92fbcf53809c.png

在实现这一TAB,可以设置相位增量是固定的还是可以更改的,相位增量能够控制输出的正余弦信号的频率,这里选择可更改的,便于在之后的使用中生成不同频率的信号。需要注意的时候,生成的信号需要满足奈奎斯特抽样定理,也就是抽样时钟必须是被采样信号频率的两倍。以这个例子来说,系统时钟为40M,那么,最多可以生成频率为20MHz的正余弦信号。

除了相位自增量外,初始的相位也是可以通过参数来修改的,在这里就默认不修改了。

在输出信号的时候,可以同时输出正余弦信号,这在正交调制解调的过程中十分有用。

除此之外,还可以输出当前的相位。

8bcbdd9e-9041-11ef-a511-92fbcf53809c.png

在具体实现这一TAB中,保持默认就可以,是用来配置接口。根据手册上描述的,可以选择这些信号来生成不同类型的接口。这些接口都是AXI-Stream 类型的接口,只需要满足AXIS的规则就好了。

8bfdbdb4-9041-11ef-a511-92fbcf53809c.png

8c29a19a-9041-11ef-a511-92fbcf53809c.png

在输出频率这一TAB,可以输入期望的输出频率,若有多个通道,可以选择给多个通道设定初始的频率输出值。这个期望频率在前面选择了相位增量式可编程的时候就没什么用了。因为最终输出的信号的频率是通过相位增量来控制的。

8c573524-9041-11ef-a511-92fbcf53809c.png

到这里这个IP基本就配置完了。可以看一下总结,和最终输出信号的接口信息。需要特别注意的就是输出的正余弦信号在输出总线上所占据的bit‘位。DDS IP通过一个AXIS接口同时输出正弦信号和余弦信号。就比如在这个例子中,m_axis_data[11:0]传输的就是余弦信号,其中m_axis_data[11]是余弦信号的符号位。

m_axis_data[27:16]传输的是正弦信号,其中m_axis_data[27]是正弦信号的符号位。

8c851bce-9041-11ef-a511-92fbcf53809c.png

3 DDS IP测试

写个Testbench测试一下:

`timescale1ns/1ps
moduletb_test_dds();

regclk;
reg[31:0]frequency;
regfreq_vld;
wirem_axis_data_tvalid;
wire[31:0]m_axis_data_tdata;
wiredds_vld;
wire[11:0]dds_cos;
wire[11:0]dds_sin;

assigndds_vld=m_axis_data_tvalid;
assigndds_cos=m_axis_data_tdata[11:0];
assigndds_sin=m_axis_data_tdata[27:16];

//parameterSYS_CLK=40000000;//systemclock40M
//parameterCLK_6M=6000000;//frequency6M
//parameterCLK_400K=400000;//frequency400K
//parameterCLK_2M=2000000;//frquency2M
//parameterPHASE_WIDTH=32;//相位宽度为32bit

//clock
initialbegin
clk=0;
forever#(12.5)clk=~clk;//40Msystemclokc
end

initialbegin
frequency='d0;
freq_vld=1'b0;
repeat(3000)@(posedgeclk);

//产生一个频率为400KHz的复指数
frequency=32'd42949672;//CLK_400K*(2^PHASE_WIDTH)/SYS_CLK
freq_vld=1'b1;
@(posedgeclk)
freq_vld=1'b0;

repeat(3000)@(posedgeclk);

//产生一个频率为4MHz的复指数
frequency=32'd214748364;//CLK_4M*(2^PHASE_WIDTH)/SYS_CLK
freq_vld=1'b1;
@(posedgeclk)
freq_vld=1'b0;

repeat(3000)@(posedgeclk);

//产生一个频率为6M的复指数
frequency=32'd644245094;//CLK_6M*(2^PHASE_WIDTH)/SYS_CLK
freq_vld=1'b1;
@(posedgeclk)
freq_vld=1'b0;


end


dds_compiler_0inst_dds(
.aclk(clk),//inputwireaclk
.s_axis_config_tvalid(freq_vld),//inputwires_axis_config_tvalid
.s_axis_config_tdata(frequency),//inputwire[31:0]s_axis_config_tdata
.m_axis_data_tvalid(m_axis_data_tvalid),//outputwirem_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata)//outputwire[31:0]m_axis_data_tdata
);
endmodule

可以看到生成了不同频率的正余弦信号。一开时的时候。没有给出相位增量,所以固定输出2M的信号,之后给出了相位增量后,输出了400K 信号。

8cac5e32-9041-11ef-a511-92fbcf53809c.png

8cce230a-9041-11ef-a511-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Xilinx
    +关注

    关注

    71

    文章

    2153

    浏览量

    120795
  • DDS
    DDS
    +关注

    关注

    21

    文章

    629

    浏览量

    152461
  • IP核
    +关注

    关注

    4

    文章

    324

    浏览量

    49364

原文标题:Xilinx DDS IP使用

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    我用的是xilinx ISE 12.4 ,想问一个关于dds IP 的问题

    我想调用dds IP,调用出来后,在填写信息的第一页有一个系统时钟的填写栏,在倒数第三页有一个输出频率的填写栏(最大2M),我想问这两个填写内容有什么关系吗?求高手解答(最好把12.4这个版本的
    发表于 02-18 09:20

    基于FPGA的IPDDS信号发生器如何用IP

    我毕业设计要做一个基于FPGA的IPDDS信号发生器,但是我不会用DDSIP,有没有好人
    发表于 03-10 11:46

    xilinx dds IP输出能不能改为无符号数

    xilinx dds IP输出能不能改为无符号数,因为一般DA转化器只能转化正数
    发表于 09-29 18:30

    ip使用问题

    我调用了一个ip 在下载到芯片中 有一个time-limited的问题 在完成ip破解之后 还是无法解决 但是我在Google上的找到一个解决方法就是把
    发表于 05-17 10:28

    xilinx FPGA的FFT IP的调用

    有没有大神可以提供xilinx FPGA的FFT IP的调用的verilog 的参考程序,最近在学习FFT的IP的使用,但是仿真结果有问
    发表于 12-25 17:05

    Xilinx系列FPGA芯片IP详解

    `Xilinx系列FPGA芯片IP详解(完整高清书签版)`
    发表于 06-06 13:15

    如何使用DDS IP生成任意波形?

    一个DDS应用,我想使用Xilinx DDS IP内核生成任意波形,但我看到的是DDS只能生成正弦或余弦波形数据。你知道如何用其他数据替换正
    发表于 02-12 08:07

    各位大佬,xilinx ip的各个参数的含义从哪里看啊

    各位大佬,xilinx ip的各个参数的含义从哪里看啊
    发表于 05-30 10:37

    基于FPGA的DDS IP设计方案

    以Altera公司的Quartus Ⅱ 7.2作为开发工具,研究了基于FPGA的DDS IP设计,并给出基于Signal Tap II嵌入式逻辑分析仪的仿真测试结果。将设计的DDS
    发表于 04-05 16:04 85次下载
    基于FPGA的<b class='flag-5'>DDS</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>设计方案

    Xilinx Vivado的使用详细介绍(3):使用IP

    IPIP Core) Vivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、DDS
    发表于 02-08 13:08 2096次阅读
    <b class='flag-5'>Xilinx</b> Vivado的使用详细介绍(3):使用<b class='flag-5'>IP</b><b class='flag-5'>核</b>

    浅析Vivado的IPDDS使用方式及注意事项

    vivado提供了DDS IP核可以输出正余弦波形,配置方法如下
    的头像 发表于 04-27 15:52 9883次阅读
    浅析Vivado的<b class='flag-5'>IP</b><b class='flag-5'>核</b><b class='flag-5'>DDS</b>使用方式及注意事项

    关于XilinxDDS IP的运用与讲解

    本次项目我们主要是为了讲解DDS,所以我们使用了混频这个小项目来讲解。DDS自己手写是比较简单且灵活,但是Xilinx给我们提供了相应的IP
    的头像 发表于 04-27 16:00 6619次阅读
    关于<b class='flag-5'>Xilinx</b>中<b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>的运用与讲解

    关于Ultra96的Xilinx DDS编译器IP教程

    电子发烧友网站提供《关于Ultra96的Xilinx DDS编译器IP教程.zip》资料免费下载
    发表于 12-13 10:17 1次下载
    关于Ultra96的<b class='flag-5'>Xilinx</b> <b class='flag-5'>DDS</b>编译器<b class='flag-5'>IP</b>教程

    Xilinx Vivado DDS IP使用方法

    DDS(Direct Digital Frequency Synthesizer) 直接数字频率合成器,本文主要介绍如何调用XilinxDDS IP
    的头像 发表于 07-24 11:23 4471次阅读
    <b class='flag-5'>Xilinx</b> Vivado <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>使用方法

    如何申请xilinx IP的license

    在使用FPGA的时候,有些IP是需要申请后才能使用的,本文介绍如何申请xilinx IP的license。
    的头像 发表于 10-25 16:48 116次阅读
    如何申请<b class='flag-5'>xilinx</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的license