FPGA自学笔记--DDS ip核的使用(vivado)

学习记录之用。

一、DDS概念

DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器本文主要介绍如何调用Xilinx的DDS IP核生成某一频率的Sin和Cos信号。

二、频率选择

打开IP核配置,parameter Selection选择System Parameters,有两种选择,

选择System Parameters时,输出频率可以在IP核中直接输入。

选择Hardware Parameter时,可以在IP核中或者程序中输入频率控制字PINC来确定,

如图,

PINC选择的是 1101000110110111 = 53687

由手册公式,

 

 f = (53687*100*10^6)/(2^16) = 81.91986 MHz

我们再看IP核的信息。

 另外,我们也可以在程序中控制PINC。

top.v 如下。

`timescale 1ns / 1ps

module sin_20M(
    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


 tb文件如下。

`timescale 1ns / 1ps
//

// 该tb文件中直接输入控制字 66 ----6666
//  f=(PINC*fclk)/(2^phase width)=6666乘100000000/2的16次方=10.17MHz
//


module sintb(
    );
    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;
sin_20M     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'd6666;
    #100000
    config_data_poff = 16'h8000;
    $stop;
end
endmodule

 输出的波形。

完整工程:https://download.csdn.net/download/lgk1996/83163014

DDS IP使用可以通过以下步骤进行: 1. 首先,在Vivado中创建一个新的工程,并选择适当的目标设备。 2. 在工程中添加DDS IP。可以通过在IP目录中搜索"DDS"来找到该IP。 3. 双击添加的DDS IP,进入IP配置界面。在这里,你可以设置DDS的参数,如频率、相位、幅度等。 4. 根据你的需求,配置DDS IP的输入和输出接口。你可以设置控制字的输入接口,以及正弦波和余弦波的输出接口。 5. 配置完成后,生成IP的例化代码。这将生成一个包含DDS IP的Verilog或VHDL代码的文件。 6. 将生成的例化代码添加到你的设计中,并连接到其他模块。 7. 在设计中实例化DDS IP,并根据需要设置控制字和时钟信号。 8. 运行综合、实现和生成比特流文件。 9. 将比特流文件下载到目标设备中进行验证和测试。 以上是使用Vivado进行DDS IP的基本步骤。你可以根据具体的需求和设计要求进行进一步的配置和调整。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [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^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [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^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上园村蜻蜓队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值