如何使用Vivado DDS ip核产生正余弦波

实验要求:使用50M的系统时钟分别产生一路12位的10KHZ的正弦波和余弦波
第一步:打开DDS ip核

Configuration Options: 选择有Sin和Cos模式

System Clk:选择50MHz

Mode Of Operation:这里可以有两种选择Standard模式和Rasterized模式
在Standard模式下:填写Phase width(相位位宽): 默认16位不变,填写Output width为实验要求的12位;

利用公式计算:10K=50M*ΔΦ(频率控制字又名相位增量)/2^16(Phase width)即10K=50M*ΔΦ/2^16  计算得到ΔΦ。

Phase Increament Programmability 这里选择fix(固定值)。

填入四舍五入后的ΔΦ的值(转化为二进制)。

后续通过仿真查看波形。

存在的问题:因为是四舍五入后的ΔΦ,所以产生的波形只是大致10K但是不准确,采取第二种模式。

选择Rasterized模式,这里发现Phase Width已经固定了,需要我们填入Modulus  的值

利用公式:

这里发现这个公式利用M的值代替了前面2^16(Phase width)的值,所以这里我们只需要自己定义ΔΦ/M的值就可以输出fout。 这里定义了10K=50M*ΔΦ/M。令M=10000,那么ΔΦ=2。

在这里填入10。

没有提到的地方都用默认。

测试代码:
module dds(
input sys_clk,
input sys_rst_n,
output  [11:0]sin_data,
output  [11:0]cos_data
    );
wire [31:0]data;
wire  [15:0]phase_data;
wire  phase_valid;
wire  data_valid;     
assign cos_data={~data[11],data[10:0]};
assign sin_data={~data[27],data[26:16]};    
dds_compiler_0 your_instance_name (
  .aclk(sys_clk),                                // input wire aclk
  .m_axis_data_tvalid(data_valid),    // output wire m_axis_data_tvalid
  .m_axis_data_tdata(data),      // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(phase_valid),  // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(phase_data),    // output wire [15 : 0] m_axis_phase_tdata
  .event_pinc_invalid( )    // output wire event_pinc_invalid
);
endmodule

Note:最高位要取反才能得到连续的正余弦波。


仿真代码:
`timescale 1ns/1ns
module tb_dds(
    );
reg sys_clk;
reg sys_rst_n;

initial begin
sys_clk<=1'b0;
sys_rst_n<=1'b0;
#20
sys_rst_n<=1'b1;
end
always #10 sys_clk=~sys_clk;
wire [11:0]sin_data;
wire [11:0]cos_data;
 dds u_dds(
.sys_clk       (sys_clk) ,
.sys_rst_n     (sys_rst_n ),
.sin_data      (sin_data),
.cos_data      (cos_data)
    );
endmodule

使用第二种模式能够得到周期更精确的正余弦波。

欢迎评论指正,交流学习!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值