【FPGA】 十二、Vivado DDS IP核实现扫频信号

这篇具有很好参考价值的文章主要介绍了【FPGA】 十二、Vivado DDS IP核实现扫频信号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

前言

一、DDS IP核概述

二、DDS IP核配置

三、调用DDS IP核

总结


前言

    在我前面的工程中,都是一些比较通用的设计工程,没有用到哪一家的IP核,所以代码具有很好的移植性;今天我就来讲一下基于Xilinx厂家的芯片做一期DDS的设计与验证,这里我所采用的EDA工具是Vivado 2018.3,里面集成了DDS的IP核,我们直接进行调用即可。

        Xilinx公司是FPGA的主要生产商,即使在现在的FPGA领域它都有着很大的话语权,目前市面上的FPGA芯片主要有Xilinx和Altera两家,其中Xilinx占据主导地位,其产品在各个方面的应用更是炉火纯青。我们都知道FPGA的优点是基于它的可编程性,使得其开发周期短,但为了提升FPGA开发的周期性,各家都提供了一些通用功能的IP核,包括固化在芯片内的硬IP核和可编程调用的软IP核,并在开发工具中提供了IP和的实例化和调用功能,下面我就在Vivado中调用DDS IP核来进行设计。 


一、DDS IP核概述

【FPGA】 十二、Vivado DDS IP核实现扫频信号

         上图是DDS IP核的方案图,从图中我们可以看到DDS IP核主要由5部分组成,其中DDS IP核的核心是相位累加器和LUT查找表,它们可以独立使用,也可与一个可选的相位发生器一起使用。相位累加器实现查找表地址的产生,LUT查找表用来存储输出波形。还有泰勒级数矫正模块和抖动产生器,用来改善SFDR。最两边是AXI4接口,是基于AXI4总线协议的接口模块,用来实现相位累加字配置,多通道配置以及相位累加器输出和sin/cos波形输出。


二、DDS IP核配置

1、首先创建一个工程文件,然后点击IP Catalog,直接在搜索框中搜索DDS,创建DDS IP核。

【FPGA】 十二、Vivado DDS IP核实现扫频信号

2、 然后双击DDS Compiler,进行DDS IP核的配置界面。

【FPGA】 十二、Vivado DDS IP核实现扫频信号

【FPGA】 十二、Vivado DDS IP核实现扫频信号 

         DDS IP核可以配置成三种模式,分别是相位累加器和SIN/COS LUT模式、仅相位产生器模式、仅SIN/COS LUT模式;这里我们选择第一种相位累加器和SIN/COS LUT模式。

        输入时钟:根据系统时钟定,我这里选择100MHz

        通道数:我这里选择单通道

        参数选择有系统参数(System Parameter)和硬件参数(Hardware Parameter)两种,当选择系统参数时,需要根据频率位宽来计算SFDR和FR(频率控制字);当选择硬件参数时,直接定义输出的相位宽度和频率宽度即可,我这里选择硬件参数,相位位宽是32位,频率位宽是8位。

        根据Xilinx官方手册,phase width(相位位宽),Frequency Resolution(频率分辨率),channels(通道数),output width(输出波形位宽),SFDR之间的对于关系为:

 【FPGA】 十二、Vivado DDS IP核实现扫频信号

         关于output width的位宽不同,输出的数据格式如下:

【FPGA】 十二、Vivado DDS IP核实现扫频信号

 3、进入第二页配置界面,配置频率控制字、相位控制字和输出波形。

【FPGA】 十二、Vivado DDS IP核实现扫频信号

         由于在本次实验中需要连续输出不同的频率信号,达到一个扫频的目的,所以这里将频率可控制字和相位控制字都设置为可编程模式,输出的波形为正余弦波形。如果你想输出固定频率的波形,就可以选择锁定模式。这个根据实验要求进行更改即可。

4、第三页和第四页本次实验没有要求,保持默认即可。在第四页,由于频率控制字是可编程的,在代码中会进行改变,这里就不用做任何处理。

5、第5页就是配置的总览界面了,在这里你可以看到你所配置的信息,方便查看配置是否有问题。

【FPGA】 十二、Vivado DDS IP核实现扫频信号

6、最后点击OK就生成DDS IP核了,然后就将DDS IP核例化到我们所设计的工程当中,就可以直接使用了。


三、调用DDS IP核

        调用DDS IP核实现扫频信号,我这里设计的扫频范围是1KHz--10KHz,通过控制频率控制字来更改输出的波形的频率,让其在1KHz到10KHz直接变化,又让其从10KHz变化到1KHz,展现在频域中是三角波的形式。

1、顶层模块

`timescale 1ns / 1ps
//
// 
// Create Date: 2023/03/16 09:54:38
// Design Name: 卡夫卡与海
// Module Name: DDS_top
// Project Name: DDS顶层模块
//
// 
//


module DDS_top(
    input            sys_clk       ,//系统时钟   100MHz
    input            sys_rst_n     ,//系统复位
    
    output           m_data_tvalid ,//数据有效标志
    output   [7:0]   m_data_sin    ,//sin波形
    output   [7:0]   m_data_cos     //cos波形
);

//中间信号定义
wire           s_phase_tvalid  ;//相位有效标志
wire   [31:0]  s_phase_tdata   ;//相位控制字

wire           s_config_tvalid ;//频率有效标志
wire   [31:0]  s_config_tdata  ;//频率控制字

wire           m_phase_tvalid  ;//输出相位有效标志
wire   [31:0]  m_phase_tdata   ;//输出相位

wire   [15:0]  m_data_tdata    ;//输出为16位,高8位是sin波形,低8位是cos波形
//assign m_data_sin = m_data_tdata[15:8];
//assign m_data_cos = m_data_tdata[7:0];

assign m_data_sin = {~m_data_tdata[15],m_data_tdata[14:8]};//将输出转为有符号数据输出  sin
assign m_data_cos = {~m_data_tdata[7],m_data_tdata[6:0]}  ;//将输出转为有符号数据输出  cos


//模块例化
//DDS_IP模块
dds_compiler_0 u_dds_0 (
  .aclk                    (sys_clk        ),// input wire aclk
  .s_axis_phase_tvalid     (s_phase_tvalid ),// input wire s_axis_phase_tvalid
  .s_axis_phase_tdata      (s_phase_tdata  ),// input wire [31 : 0] s_axis_phase_tdata
  .s_axis_config_tvalid    (s_config_tvalid),// input wire s_axis_config_tvalid
  .s_axis_config_tdata     (s_config_tdata ),// input wire [31 : 0] s_axis_config_tdata
  .m_axis_data_tvalid      (m_data_tvalid  ),// output wire m_axis_data_tvalid
  .m_axis_data_tdata       (m_data_tdata   ),// output wire [15 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid     (m_phase_tvalid ),// output wire m_axis_phase_tvalid
  .m_axis_phase_tdata      (m_phase_tdata  ) // output wire [31 : 0] m_axis_phase_tdata
);

//控制模块
dds_control u_dds_control(
    .clk             (sys_clk        ),//时钟
    .rst_n           (sys_rst_n      ),//复位
    
    .phase_valid     (s_phase_tvalid ),//相位有效标志
    .phase_data      (s_phase_tdata  ),//相位控制字
    .config_valid    (s_config_tvalid),//频率有效标志
    .config_data     (s_config_tdata ) //频率控制字
);


endmodule

2、DDS IP核控制模块:控制频率控制字的变化

`timescale 1ns / 1ps
//
// 
// Create Date: 2023/03/16 10:26:29
// Design Name: 卡夫卡与海
// Module Name: dds_control
// Project Name: DDS控制模块
// 
// 
//


module dds_control(
    input             clk          ,//时钟
    input             rst_n        ,//复位
    
    output            phase_valid  ,//相位有效标志
    output   [31:0]   phase_data   ,//相位控制字
    output            config_valid ,//频率有效标志
    output   [31:0]   config_data   //频率控制字
);

//参数定义
parameter F_word_1KHz   = 32'hA7C5  ;//1KHz频率控制字 M = 1_000*2^32/100_000_000
parameter F_word_10KHz  = 32'h68DB8 ;//10KHz频率控制字 M = 10_000*2^32/100_000_000
parameter F_word_change = 32'h1     ;//1KHz-10KHz变化精度

//信号定义
reg    [31:0]    config_data_reg    ;//频率控制字寄存器

reg              max_flag           ;//当频率控制字最大时,拉高

//max_flag
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        max_flag <= 1'b0;
    end
    else if(config_data_reg >= F_word_10KHz)begin
        max_flag <= 1'b1;
    end
    else if(config_data_reg == F_word_1KHz)begin
        max_flag <= 1'b0;
    end
end


//控制频率控制字均匀变化
always @(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        config_data_reg <= F_word_1KHz;
    end
    else if(max_flag == 1'b1)begin
        config_data_reg <= config_data_reg - F_word_change;
    end
    else begin
        config_data_reg <= config_data_reg + F_word_change;
    end
end

//输出
assign phase_valid = 1'b1;
assign phase_data = 32'h0;//设置相位控制字为0
assign config_valid = 1'b1;
assign config_data = config_data_reg;


endmodule

3、仿真模块

`timescale 1ns / 1ps
//
// 
// Create Date: 2023/03/16 14:04:09
// Design Name: 卡夫卡与海
// Module Name: DDS_top_tb
// 
// 
//


module DDS_top_tb();
reg            sys_clk       ;
reg            sys_rst_n     ;

wire           m_data_tvalid ;
wire   [7:0]   m_data_sin    ;
wire   [7:0]   m_data_cos    ;

//模块例化
 DDS_top u_DDS_top(
   .sys_clk         (sys_clk      ),//系统时钟   100MHz
   .sys_rst_n       (sys_rst_n    ),//系统复位
    
   .m_data_tvalid   (m_data_tvalid),//数据有效标志
   .m_data_sin      (m_data_sin   ),//sin波形
   .m_data_cos      (m_data_cos   ) //cos波形
);

//产生激励
initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    #20;
    sys_rst_n = 1'b1;
    
    #20000000;
    $stop;
end

always #5 sys_clk = ~sys_clk;


endmodule

4、仿真波形如下:

【FPGA】 十二、Vivado DDS IP核实现扫频信号

        通过仿真波形,可以看到生成了一个连续变化的正弦波和余弦波,并且波形由慢到快再由快到慢,成周期性变化,满足设计要求。 


总结

        DDS IP核的配置还是比较简单的,在使用封装好的IP核时,不论是Xilinx的还是Altera的,看官方手册还是很重要的,只不过是纯英文的,但是可以提升我们的英文阅读能力嘛!当你阅读了很多IP核的手册过后,你就会发现那些手册的排版基本上都是差不多的,这样阅读起来也就没那么费劲了。文章来源地址https://www.toymoban.com/news/detail-438844.html

到了这里,关于【FPGA】 十二、Vivado DDS IP核实现扫频信号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vivado DDS IP配置

            本文记录Vivado中DDS IP核相关配置方法,主要涉及输出信号位宽、频率、频率分辨率、相位等相关内容。       一、点击 IP Catalog,打开DDS IP配置界面 Configuration界面: 1、System Requirement         System Clock:产生DDS的时钟         Number of Channels:默认为1 2、System Par

    2024年02月15日
    浏览(37)
  • 基于AD9767高速DAC的DDS信号发生器(Verilog&Vivado)

    基于AD9767高速DAC的DDS信号发生器 提示:以下是本篇文章正文内容,下面案例可供参考 1.做一个双通道的信号发生器; 2.简单调整每个通道的频率输出; 3.能够调整每个通道的输出相位; 4.能够输出正弦波,三角波,方波。 代码如下(示例): 代码如下(示例): 【附件:】

    2024年02月06日
    浏览(57)
  • vivado DDS IP核的使用及仿真

    参考:https://blog.csdn.net/weixin_45303812/article/details/123704440 新人第一次写文档,有错误的地方请大佬指点。 文档:Xilinx官网搜DDS Configuration 可配置参数 : 1.Configuration Options,有如下三种模式 Phase Generator and SIN/COS LUT (DDS): 相位和sin和cos的数据都是IP核自己产生 Phase Generator only:

    2023年04月15日
    浏览(44)
  • 基于FPGA的DDS信号发生器

        两个礼拜前就像写这个文档了,但是一直鸽到现在,主要是人摆了。还有个技术上的原因是,我想用串口屏显示波形,在串口调试助手上返回的数据是对的,但是发到串口屏上啥反应没有,人就很麻,如果这个弄不出来,前面 HMI 串口屏的工程、人机交互界面就白做了。

    2024年02月06日
    浏览(46)
  • 如何使用Vivado DDS ip核产生正余弦波

    实验要求:使用50M的系统时钟分别产生一路12位的10KHZ的正弦波和余弦波 第一步:打开DDS ip核 Configuration Options: 选择有Sin和Cos模式 System Clk:选择50MHz Mode Of Operation:这里可以有两种选择Standard模式和Rasterized模式 在Standard模式下:填写Phase width(相位位宽): 默认16位不变,填写

    2024年04月11日
    浏览(36)
  • FPGA之简易DDS信号发生器设计

    设计一个能产生频率可变、相位可调的能产生正弦波、三角波、方波、锯齿波的信号发生器。 DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比,DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,

    2024年02月02日
    浏览(47)
  • Vivado DDS IP核使用、仿真、多相处理和相关计算验证

    第一次学,查询了很多CSDN网页,也问了组里的技术专家,得到了很多指导。把我的个人学习笔记在这里保存记录分享,如果有问题欢迎大家批评指正。也欢迎大家点赞评论收藏,一起进步! 1 DDS IP核的配置 创建工程,在IP核配置页面选择DDS compiler 6.0。对IP核进行配置。 如图

    2024年02月02日
    浏览(48)
  • 基于FPGA的简易 DDS 信号发生器的设计

    DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。作为设计人员,我们

    2024年02月07日
    浏览(54)
  • vivado技巧|如何在fpga内部实现i2c信号透传(fpga内部两组i2c inout信号互连)

    大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会

    2024年03月18日
    浏览(124)
  • DDS信号发生器Verilog波形发生器FPGA

    名称:DDS信号发生器Verilog波形发生器 软件:Quartus 语言:Verilog 要求:  1.可产生正弦波,锯齿波,三角波,方波4种波形,频率可调  2.具有波形选择、起动、停止功能。 代码下载:DDS信号发生器Verilog波形发生器_Verilog/VHDL资源下载 代码网:hdlcode.com 部分代码展示 设计文档

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包