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

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

3天内不再提示

求一种基于DDS IP核的任意波形发生器设计方案

冬至子 来源:FPGA LAB 作者:李锐博恩 2023-06-21 11:18 次阅读

IP核配置

定制输出数据位宽

这里的输出数据指的是输出的波形数据,其位宽相关参数介绍如下:

图片

可见,输出数据宽度和SFDR以及Noise Shaping有关,你可先不必知道Noise Shaping和SFDR是什么?只需要暂时知道在IP核定制时需要选择即可,如果Noise Shaping选择了None and Dithering,则输出数据宽度为:

图片

如果为Taylor:

图片

而Spurious Free Dynamic Range (SFDR)翻译为无杂散动态范围,和输出数据宽度以内部总线宽度以及各种实现策略有关;假设我需求的数据宽度为10位,Noise Shaping选为None,则SFDR为60,输入IP定制页面:

图片

查看输出是否为10bit:

图片

定制相位位宽(或频率分辨率)

根据数据手册对频率分辨率的描述:

频率分辨率:以赫兹为单位指定,指定最小频率分辨率,用于确定相位累加器使用的相位宽度及其相关的相位增量(PINC)和相位偏移(POFF)值。较小的值可提供较高的频率分辨率,并且需要较大的累加器。较大的值会减少硬件资源。根据噪声整形的选择,可以增加相位宽度,并且频率分辨率高于指定的分辨率。

对于光栅化模式(rasterized mode),频率分辨率由系统时钟、通道数和所选模数固定。从这段描述,我们得出信息,频率分辨率可以用来控制相位位宽。如果操作模式选择标准模式,如下IP 核定制页面:

图片

频率分辨率可以这样计算:

图片

我们先给定需求的相位宽度,又已知系统频率值,根据公式就可以算出频率分辨率;将频率分辨率代入IP核定制页面,即可自动得到相位宽度。 其实从上式也可以直接推出相位宽度:

图片

本例我们的系统频率为100MHz,如果想要相位宽度为16位,则频率 分辨率为:

图片

在IP核定制页面,如下图,我们输入频率分辨率的值:

图片

查看相位宽度为16位:

图片

上面选择的是标准模式,如果选择另一种模式呢?Rasterized Mode of Operation:光栅化操作模式;我们可以根据下面公式得到频率分辨率, 但和相位宽度没有直接关系 ,为了知识完整性,简介如下:

图片

在IP核定制页面提现如下:

图片

输出频率

本示例选择的是单通道,也即通道数为1,因此输出频率也只能选择一个:

图片

输出频率值也不是随便选择的,而是有其范围的,例如我输入105MHz,则通过不了:

图片

提示超出范围,范围为(0,100).

输出正余弦选择以及数据格式

可以在IP核定制页面选择输出正弦还是余弦还或者是都输出:

图片

本示例选择输出正余弦,由于输出采用的是axi总线,因此输出数据位于M_AXIS_DATA_TDATA中,那么正余弦输出结果是如何组合成M_AXIS_DATA_TDATA的呢?

图片

数据手册给出解释:

输出DATA通道TDATA结构将正弦和余弦输出字段符号扩展到下一个字节边界,然后以最低有效部分的余弦进行连接,以创建m_axis_data_tdata。如果仅选择正弦或余弦之一,则将其符号扩展并放入m_axis_data_tdata的最低有效部分。

下图显示了这三种配置的TDATA的内部结构。正交输出,仅余弦和仅正弦。例如,在图中显示了11位输出,符号扩展到16位。<<<表示符号扩展名:

图片

因此我们可以这么认为,由于存在扩展符号位的关系,我们可以提取低一半的数据为COS,高一半的数据未SIN。

其他设置

有了上面的定制参数,输出波形是没有问题了,至于其他的定制参数,本文选择默认:

图片

图片

图片

图片

点击OK,等待IP核定制完成。

电路设计

本示例设计十分简单,就是单纯例化下IP核:

图片

复制例化模板:

图片

给出设计文件:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: Reborn Lee
// Module Name: waveform_gen
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: Reborn Lee
// Module Name: waveform_gen
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////




module waveform_gen(
	input i_clk,
	output o_data_valid,
	output [31 : 0] o_data,
	output o_phase_valid,
	output [15 : 0] o_phase


    );


dds_compiler_0 inst_dds (
  .aclk(i_clk),                                // input wire aclk
  .m_axis_data_tvalid(o_data_valid),    // output wire m_axis_data_tvalid
  .m_axis_data_tdata(o_data),      // output wire [31 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(o_phase_valid),  // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(o_phase)    // output wire [15 : 0] m_axis_phase_tdata
);


endmodule

行为仿真

仿真程序也仅仅例化设计文件,设计下系统频率即可:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: Reborn Lee
// Create Date: 2020/06/03 17:25:26
// Module Name: waveform_gen_tb
//////////////////////////////////////////////////////////////////////////////////




module waveform_gen_tb(


    );


	reg clk;


	wire o_data_valid;
	wire [15 : 0] o_data;
	wire o_phase_valid;
	wire [31 : 0] o_phase;




	initial begin
		clk = 0;
		forever begin
			# 5 clk = ~clk;
		end
	end




	waveform_gen inst_waveform_gen
		(
			.i_clk         (clk),
			.o_data_valid  (o_data_valid),
			.o_data        (o_data),
			.o_phase_valid (o_phase_valid),
			.o_phase       (o_phase)
		);




endmodule

执行行为仿真:

图片

注意,仿真时间可以在此确定:

图片

仿真波形:

图片

正余弦拆开:

图片

选择高16位作为sin。下面选择有符号数显示:

图片

同时选择模拟显示:

图片

之后你会发现正余弦显示波形相对于整体太平坦,以致于看起来像是直线,这是因为显示范围太大了导致的:

图片

改下显示的坐标幅度范围:

图片

图片

显示正常了。

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

    关注

    21

    文章

    634

    浏览量

    152649
  • SFDR
    +关注

    关注

    0

    文章

    38

    浏览量

    12920
  • 累加器
    +关注

    关注

    0

    文章

    50

    浏览量

    9453
  • 任意波形发生器

    关注

    0

    文章

    140

    浏览量

    15758
  • 系统时钟
    +关注

    关注

    1

    文章

    30

    浏览量

    9309
收藏 人收藏

    评论

    相关推荐

    基于ROM的任意波形发生器DDS

    、相位以及幅度的数控调制,广泛应用在电信与电子仪器和通信领域。波形发生器一种数据信号发生器,在调试硬件时,常常需要加入些信号,以观察电路
    的头像 发表于 06-18 19:24 1.7w次阅读
    基于ROM的<b class='flag-5'>任意</b><b class='flag-5'>波形</b><b class='flag-5'>发生器</b>(<b class='flag-5'>DDS</b>)

    基于DDS任意波形/ 函数发生器之间的差别

    任意波形/ 函数发生器(AFG)通过读取内存的内容,来同时创建函数波形任意波形。大多数现代AF
    发表于 03-29 16:31 2643次阅读
    基于<b class='flag-5'>DDS</b>的<b class='flag-5'>任意</b><b class='flag-5'>波形</b>/ 函数<b class='flag-5'>发生器</b>之间的差别

    一种基于DDS的幅值可调信号发生器的设计

    、工程设计等系统信号源的首选。在扩频和跳频系统、数字广播、高清晰度电视、线性调频以及仪器仪表以及电子测量等领域。DDS已经逐步成为高性能信号源发生器的核心技术Ill。本文提出了一种基于AT89S52
    发表于 03-08 13:37

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

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

    介绍一种不错的基于DDS器件AD9851的信号发生器设计方案

    大佬分享款基于DDS器件AD9851的信号发生器设计方案
    发表于 04-12 06:35

    高速任意波形发生器的设计

     基于数字频率合成技术给出一种高速任意波形发生器设计方案,详细介绍各个模块的硬件电路设计以及MCU部分的软件设计。该
    发表于 07-21 15:13 56次下载

    一种DDS任意波形发生器的ROM优化方法

    提出了一种改进的基于直接频率合成技术(DDS)的任意波形发生器在现场可编程门阵列(FPGA)上的实现方法。首先将三角波、正弦波、方波和升/降
    发表于 09-23 17:54 61次下载

    基于FPGA的DDS信号发生器设计方案解析

    将虚拟仪器技术同FPGA技术结合,设计了个频率可控的DDS任意波形信号发生器。在阐述直接数字频率合成技术的工作原理、电路构成的基础上,分别
    发表于 12-04 11:40 33次下载
    基于FPGA的<b class='flag-5'>DDS</b>信号<b class='flag-5'>发生器</b><b class='flag-5'>设计方案</b>解析

    基于Verilog实现的DDS任意波形发生器

    DDS是从相位的概念直接合成所需波形一种频率合成技术。不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。本文为大家介绍基于Verilog实现的
    发表于 01-08 11:58 6845次阅读
    基于Verilog实现的<b class='flag-5'>DDS</b><b class='flag-5'>任意</b><b class='flag-5'>波形</b><b class='flag-5'>发生器</b>

    高速任意波形发生器的原理及硬件设计方案

    波形发生器的应用在生活中随处可见,其中使用较多的波形发生器任意波形
    发表于 11-26 09:17 7875次阅读
    高速<b class='flag-5'>任意</b><b class='flag-5'>波形</b><b class='flag-5'>发生器</b>的原理及硬件<b class='flag-5'>设计方案</b>

    浅谈任意波形发生器及通道合并功能

    浅谈任意波形发生器及通道合并功能  任意波形发生器(AWG)是
    的头像 发表于 01-19 15:54 651次阅读

    任意波形发生器与示波器怎么连接

    在电子测试领域中,任意波形发生器和示波器是两非常重要的测试设备。任意波形
    的头像 发表于 05-15 15:38 1028次阅读

    任意波形发生器如何输出电压

    任意波形发生器(Arbitrary Waveform Generator,简称AWG)是一种电子测试设备,它能够产生各种形状、频率和振幅的电压信号,以满足电子电路、自动控制以及教学实验
    的头像 发表于 05-15 15:38 809次阅读

    什么是任意波形发生器任意波形发生器是干什么用的?

    任意波形发生器一种高度灵活的电子测试设备,它能够生成几乎任何类型的电信号波形
    的头像 发表于 05-28 16:19 831次阅读

    什么是任意波形发生器

    在电子测量、通信、科研以及音乐创作等多个领域中,波形发生器作为一种能够产生特定波形信号的电子设备,发挥着不可或缺的作用。而任意
    的头像 发表于 05-30 15:53 984次阅读