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

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

3天内不再提示

解析Vivado如何调用DDS的IP进行仿真

Hx 来源:FPGA探索者 作者:FPGA探索者 2021-04-27 16:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

DDS(Direct Digital Synthesis,直接数字频率合成),作为信号发生器使用,在Quartus中也叫NCO(Numerically Controlled Oscillator,数字控制振荡器),是软件无线电中的重要组成部分。

本次使用Vivado调用DDS的IP进行仿真,并尝试多种配置方式的区别,设计单通道信号发生器(固定频率)、Verilog查表法实现DDS、AM调制解调、DSB调制解调、可编程控制的信号发生器(调频调相)。

使用System parameters和Hardware parameters分别配置,对比Standard Mode 标准模式和 Rasterized Mode栅格模式的不同,对比不同时钟下同一个配置的不同。

一、新建工程

新建工程,新建原理图BlockDesign,调用DDS的IP核,默认输出信号时域波形和相位信息。

100063119-126419-01.png

100063119-126420-02.png

二、DDS 配置

第一页:基础配置

100063119-126421-03.png

1:配置选项

三种模式可选(相位发生器+sin/cos波形发生器、仅有相位发生器、仅有sin/cos波形发生器);

2:运行时钟aclk;

100MHz工作时钟,即100MHz采样率。

3:通道个数;

设为1,单通道模式,通道的采样频率等于采样时钟100MHz,当设为多个通道时,每个通道的采样率为工作时钟/通道数,比如4通道100MHz时钟,每个通道采样率25MHz。

4:操作模式;

Standard标准模式(常用),Rasterized栅格模式。两种情况下,输出的频率和频率分辨率、相位增量等参量的计算方式不同,具体参见Xilinx的PG141第14~18页。

Standard Mode 和 Rasterized Mode在实现指定频率、幅度的信号时,输出没有太大的差别,两者均能满足要求,一般使用Standard配置方便。

主要的区别:

Standard模式下计算出来的相位增量可能是小数,而在FPGA中要对相位进行截断取整,存在相位误差,对噪声要求较高的场合,可以使用8处的噪声整形配置来弥补,使用相位抖动(Phase Dithering)或者泰勒级数纠正(Taylor Series Correct)来补偿相位误差;

Rasterized Mode配置下,相位增量一定是整数,不存在截断效应,没有Standard模式下的时间基抖动。

5:参数选项(System parameters、Hardware parameters)

(1) System parameters

(2) Hardware parameters

6、7、8处配置系统参数System parameters,其中:

6:配置SFDR无杂散动态范围

SFDR(SpuriousFree Dynamic Range,无杂散动态范围),对应幅度,对应M_AXIS_DATA通道,SFDR越大,用于表示幅度的数据的位宽越大;

如下图所示计算输出位宽,当使用SFDR= 96 dB,配置8处的噪声整形位None或者Dithering时,输出位宽位96/6=16位,向上取整后为16位;使用SFDR = 95 dB,95/6=15.83,向上取整为16位。

100063119-126422-04.png

7:配置频率分辨率

对应相位的增量配置、位宽,对应M_AXIS_PHASE通道,频率分辨率越小,用于表示相位的数据的位宽越大;

100063119-126423-05.png

8:配置噪声整形

4处配置成Standard标准模式时才会使用噪声整形,

Auto根据设计的SFDR参数自动选择是否使用整形;

None不整形;

Phase Dithering相位抖动,在使用相位截断技术时,产生随机的噪声来使得量化误差随机;

Taylor Series Correct 泰勒级数校正;

4处配置成Rasterized时,不存在相位误差,只能配置None。

For virtually all applications, the preferred implementationis the dithered DDS.

对于绝大多数的应用,首选的是带有相位抖动补偿的DDS。

相位抖动用于提高SFDR,但代价是增加底噪。

6、7两处的配置影响输出数据的位宽,可以在原理图中体现,也可以在“Summary”页查看,如图所示,在 100MHz 工作时钟下,1 处表示要达到0.4Hz的频率分辨率,需要输出 28 位位宽的相位(有效位宽),由AXI_Stream接口输出时,以 8 位位宽步进,所以28位有效位宽的相位信息通过高位补零达到 32 位位宽,m_axis_phase_tdata[27:0] 为有效的相位信息;2 处表示要达到 45 dB 的输出信噪比,输出的 sin 和 cos 波形数据各自需要 8 位,共计需要 16 位,其中高 8 位 m_axis_data_tdata[15:8] 表示 sin,低 8 位表示 cos;3 处表示按上述配置的输出延时有 3 个时钟周期,需要消耗 1 个18 Kbit 的 BRAM。

100063119-126424-06.png

100063119-126425-07.png

9:Hardware parameters

这种模式下直接配置输出的位宽,但是具体输出对应的SFDR和频率分辨率会在Summary中体现,也可以自行计算。

100063119-126426-08.png

100063119-126427-09.png

第二页:具体实现

100063119-126428-10.png

1处:相位增量是否支持可编程配置

Fixed是固定相位增量,DDS运行过程中不可更改,即对应不可变频率;

Programmable可编程,选中后出现配置接口,可在DDS运行过程中随时写入频率控制字改变输出波形的频率,用于偶尔改变频率;

Streaming应用于频繁改变频率,或者FM频率调制;

2处:相位偏移是否支持可编程配置

None不支持;

Fixed固定相位偏移;

Programmable可编程配置(偶尔改变);

Streaming经常改变,应用于相位调制;

3处:输出波形选择

Sine只输出sin波形;Cosine输出cos波形;两个的位宽均为第一页设置的数据位宽,Sine and Cosine同时输出sin和cos波形,其中高位表示sin,低位表示cos,总的数据位宽加倍;

4处:极性选择

sin和cos波形默认使用的是有符号数,勾选相应的选项后,正负取反;

5处:幅度模式

Full Range:全精度(全范围),针对通信应用,需要最大振幅,但由于自动增益控制导致振幅的值不那么重要的场合,输出幅度接近1;

Unit Cycle:单位圆,用于对DDS输出振幅值要求很高的应用,比如产生FFT旋转因子。单位圆时,DDS输出幅值为半全量程(即取值范围为01000.。(+ 0.5)。110000 。 .(-0.5))。

100063119-126429-11.png

6处:是否输出相位信息

勾选后含有相位输出通道,不勾选时只输出幅度信息M_AXIS_DATA;

7处:使用的存储资源类型

Auto由具体所需的资源决定,资源较少时使用DROM,资源多时选择BROM;DistributeROM选择分布式ROM(DROM),Block ROM选择块ROM资源(BROM);

8处:综合优化策略

Area是面积优先,尽可能节省资源用量(LUT、FF等),Speed速度优先,尽可能提升性能;

9处:DSP48资源的使用策略

Minimal尽可能少用,节省资源,Maximal尽可能多用,提高性能;

第三页:总线配置

单通道模式下,总线的配置只包含可选的输出信号的Ready。多通道模式下,通道可选是否包含tlast等信号。

100063119-126430-12.png

1处:输出ready信号

选中则输出的2个通道中增加tready信号(可选),根据AXI_Stream总线协议的规则,由后级接收模块输入一个ready信号(高电平),表示已经准备好接收DDS输出,此时DDS才能输出;

2处:延时配置

第四页 输出频率配置

配置各通道的输出频率,在第一页中只使用了1个Channel,所以此处只能配置一个通道,直接配置输出频率,单位MHz,比如0.02MHz;

100063119-126431-13.png

第五页:总结

资源使用较多时默认使用Block ROM,使用面积优先Area策略;单通道采样频率=时钟频率,100MHz,输出波形16 bit,高8位为sin,低8位cos。

100063119-126432-14.png

三、仿真

按照上述配置,再配置一个2 MHz输出频率的DDS。

100063119-126433-15.png

将输出的16位波形数据分割,高8位表示sin正弦信号,低8位表示cos余弦信号,相位为锯齿状,注意若输出通道中包含了ready信号,根据AXI_Stream总线的要求,外部需要给ready信号,当ready有效时,DDS才会输出,仿真中可以一直给高电平。

wire [7:0] sin_wave; wire [7:0] cos_wave; wire [7:0] sin_wave_2; wire [7:0] cos_wave_2; assign sin_wave = M_AXIS_DATA_0_tdata[15:8]; assign cos_wave = M_AXIS_DATA_0_tdata[7:0]; assign sin_wave_2 = M_AXIS_DATA_1_tdata[15:8]; assign cos_wave_2 = M_AXIS_DATA_1_tdata[7:0];

100063119-126434-16.png

编辑:lyn

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

    关注

    5

    文章

    1849

    浏览量

    154890
  • 仿真
    +关注

    关注

    53

    文章

    4404

    浏览量

    137644
  • DDS
    DDS
    +关注

    关注

    22

    文章

    683

    浏览量

    156063
  • Vivado
    +关注

    关注

    19

    文章

    846

    浏览量

    70454
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    利用 NucleiStudio IDE 和 vivado 进行软硬件联合仿真

    本文利用NucleiStudio IDE 和 vivado 对 NICE demo协处理器进行软硬件联合仿真。 1. 下载demo_nice例程:https://github.com
    发表于 11-05 13:56

    Vivado仿真之后没有出现仿真结果的解决方法

    ;Run Behavioral Simulation之后,会出现如下图界面,此时,在Tcl Console中并没有出现仿真结果。 没有出现仿真结果的原因是没有给Vivado时间进行
    发表于 10-31 06:24

    利用vivado实现对e200_opensource 蜂鸟E203一代的仿真

    最后,点击run simulation进行 行为级仿真 得到最后的仿真结果如图所示 本文参考论坛内另外两篇文章: [1] 在Windows环境下用Vivado调试E203
    发表于 10-31 06:14

    VIVADO中对NICE进行波形仿真的小问题的解决

    分别如下图 可以看到,输出运算结果的pritnf函数被#ifdef所定义,所以我们如果想在VIVADO的控制台看到输出结果,要先在main.c中定义DEBUG_INFO,如下图 这样,将编译后生成的.verilog文件再用VIVADO读入
    发表于 10-27 06:41

    vcs和vivado联合仿真

    我们在做参赛课题的过程中发现,上FPGA开发板跑系统时,有时需要添加vivadoip核。但是vivado仿真比较慢,vcs也不能直接对添加了viv
    发表于 10-24 07:28

    Vivado浮点数IP核的一些设置注意点

    Vivado浮点数IP核的一些设置注意点 我们在vivado2018.3中使用了Floating-point(7.1)IP核,可以自定义其计算种类及多模式选择。有时多种计算可以用同一
    发表于 10-24 06:25

    Nucleistudio+Vivado协同仿真教程

    (e203_hbirdv2-mastere203_hbirdv2-mastertbtb_top.v),然后修改我们要验证的仿真文件对应路径, 最后在Vivado进行行为级仿真即可得
    发表于 10-23 06:22

    如何在Vivado仿真蜂鸟SOC,仿真NucleiStudio编译好的程序

    如标题所示,我们分享如何在Vivado仿真蜂鸟SOC,仿真NucleiStudio编译好的程序 具体步骤 1. 将蜂鸟soc移植到Vivado 只要将端口映射好,注意配置好时钟和
    发表于 10-21 11:08

    STM32H743 移植 Micro-XRCE-DDS 时,在调用 gethostbyname() 时出现异常怎么解决?

    packagesMicro-XRCE-DDS-Client-latestsrccprofiletransportipudpudp_transport_external.c uxr_init_udp_platform() 函数调用 host = (struct
    发表于 09-22 06:54

    vivado仿真时GSR信号的影响

    利用vivado进行设计xilinx FPGA时,写完设计代码和仿真代码后,点击run simulation(启动modelsim进行仿真
    的头像 发表于 08-30 14:22 1011次阅读
    <b class='flag-5'>vivado</b><b class='flag-5'>仿真</b>时GSR信号的影响

    在AMD Versal自适应SoC上使用QEMU+协同仿真示例

    Cortex A72 (QEMU) 上运行的固件进行仿真,该固件会访问当前 AMD Vivado Design Suite 仿真中正在进行仿真
    的头像 发表于 08-06 17:21 1683次阅读
    在AMD Versal自适应SoC上使用QEMU+协同<b class='flag-5'>仿真</b>示例

    Vivado调用MIG产生DDR3的问题解析

    下面是调用的DDR3模块的,模块的倒数第二行是,模块的时钟输入,时钟源来自PLL产生的系统时钟的倍频。
    的头像 发表于 05-03 10:21 1214次阅读
    在<b class='flag-5'>Vivado</b><b class='flag-5'>调用</b>MIG产生DDR3的问题<b class='flag-5'>解析</b>

    Vivado FIR IP核实现

    Xilinx的FIR IP核属于收费IP,但是不需要像 Quartus那样通过修改license文件来破解。如果是个人学习,现在网络上流传的license破解文件在破解Vivado的同时也破解
    的头像 发表于 03-01 14:44 2556次阅读
    <b class='flag-5'>Vivado</b> FIR <b class='flag-5'>IP</b>核实现

    使用DDS生成三个信号并在Vivado中实现低通滤波器

    本文使用 DDS 生成三个信号,并在 Vivado 中实现低通滤波器。低通滤波器将滤除相关信号。
    的头像 发表于 03-01 14:31 2435次阅读
    使用<b class='flag-5'>DDS</b>生成三个信号并在<b class='flag-5'>Vivado</b>中实现低通滤波器

    Vivado Design Suite用户指南:逻辑仿真

    电子发烧友网站提供《Vivado Design Suite用户指南:逻辑仿真.pdf》资料免费下载
    发表于 01-15 15:25 0次下载
    <b class='flag-5'>Vivado</b> Design Suite用户指南:逻辑<b class='flag-5'>仿真</b>