52--vivado DDS IP核的使用

这周六看了Xilinx的 DDS手册学了下DDS的使用,目标是可编程生成任意频率的正弦波。
大二下没啥英语课,看这英文手册怪费劲的(就算有估计看着也费劲),有误或者表达不准确的欢迎指正。

标准operation模式下,输出频率频率=已知时钟频率*频率控制字(相位增量)/2^相位累加器位宽。
rasterized模式下,把分母换成可直接调控的M,方便输出一些整数频率波形。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相位累加器位宽为16,输出位宽为8,采用hardware parameters模式
在这里插入图片描述
频率控制字PINC(相位增量)和相位控制字POFF(相位便宜量)都选择为可编程模式。
Phase Angle Increment Values 和Phase Angle Offset Values 为频率控制字和相位控制字初始值设定。

在这里插入图片描述
在这里插入图片描述
可以从summary上看到一些配置情况
在这里插入图片描述
additional summary可以看到输出波形的预设频率和相位偏移
频率=PINC*fclk/2^phase width=53687乘100/2的16次方=81.919MHz
相位偏移为=2的15次方/2的16次方 个周期

创建完毕后,可在如下位置找到例化用的代码直接复制粘贴到top里
在这里插入图片描述

dds_compiler_0 your_instance_name (
  .aclk(aclk),                                  // input wire aclk
  .s_axis_config_tvalid(s_axis_config_tvalid),  // input wire s_axis_config_tvalid
  .s_axis_config_tdata(s_axis_config_tdata),    // input wire [31 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid),    // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata)      // output wire [15 : 0] m_axis_phase_tdata
);

介绍几个关键的参数(个人理解):
s_axis_config_tvalid:相当于一个配置通道的使能信号,高电平有效
s_axis_config_tdata:高16位用于储存相位信息(偏移的相位=2p*此值除以2^相位累加器位宽),后16位为频率控制字
m_axis_data_tvalid:输出有效信号吧TVALID for output DATA channel
m_axis_data_tdata:输出信号,高位是正弦,低位是余弦
m_axis_phase_tvalid:输出有效标志TVALID for output PHASE channel
m_axis_phase_tdata:输出相位通道

module dds001(
    input clk,
    input config_tvalid,//使能
    input rst_n,
     input [15:0]        config_data_poff,config_data_pinc,//频率和相位控制字
    output [7:0]       dds_data_sin_0,dds_data_cos_0
   
    );
   wire m_axis_data_tvalid;
   wire m_axis_phase_tvalid;
   wire [15:0]m_axis_phase_tdata;
    dds_compiler_0 dds_init (
  .aclk(clk),                                  // input wire aclk
  .s_axis_config_tvalid(config_tvalid),  // input wire s_axis_config_tvalid
  .s_axis_config_tdata({16'd0,config_data_pinc}),    // input wire [31 : 0] s_axis_config_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid),      // output wire m_axis_data_tvalid
  .m_axis_data_tdata({ dds_data_sin_0,dds_data_cos_0}),        // output wire [15 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid),    // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata)      // output wire [15 : 0] m_axis_phase_tdata
);


endmodule

贴上代码

module tb_dds(
    );
    reg clk;
    always #5 clk<=~clk;
    reg     rst_n;
wire [7:0]       dds_data_sin_0,dds_data_cos_0;
reg [15:0]        config_data_pinc,config_data_poff;
reg               config_tvalid;
dds001     dds_001_Init
(
    .clk(clk),
    .rst_n(rst_n),
    .dds_data_sin_0(dds_data_sin_0),
    .dds_data_cos_0(dds_data_cos_0),
    .config_data_poff(config_data_poff),
    .config_data_pinc(config_data_pinc),
    .config_tvalid(config_tvalid)
);
initial
begin
    clk = 0;
    rst_n = 1;
    config_data_poff = 16'h4000;
    config_data_pinc = 16'd66;
    config_tvalid = 1'b1;
    #100000
    config_data_pinc = 16'd666;
    #100000
    config_data_poff = 16'h8000;
    $stop;
end
endmodule

在这里插入图片描述

  • 5
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vivado是一款由Xilinx开发的集成电路设计工具,用于设计和实现FPGA和SoC。DDS IP核Vivado中的一个IP核,用于生成数字频率合成器。根据引用\[2\]中的代码,可以看出DDS IP核的配置是通过控制字来实现的。控制字的值决定了输出信号的频率和相位。在引用\[3\]中的tb文件中,可以看到控制字的值被设置为66和6666,这将影响DDS IP核生成的输出信号的频率。通过修改控制字的值,可以实现不同的频率输出。在Vivado使用DDS IP核,需要将IP核添加到设计中,并根据需求配置IP核的参数,如控制字的值、时钟频率等。然后,将设计综合、实现和生成比特流文件,最后下载到目标设备中进行验证和测试。 #### 引用[.reference_title] - *1* *2* [Vivado DDS IP核使用、仿真、多相处理和相关计算验证](https://blog.csdn.net/Popplio/article/details/126711613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [FPGA自学笔记--DDS ip核使用vivado)](https://blog.csdn.net/lgk1996/article/details/123245246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值