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

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

3天内不再提示

一文详解Vivado调用ROM IP core设计DDS

Hx 作者:工程师陈翠 2018-07-02 06:12 次阅读

DDS直接数字式频率合成器(Direct Digital Synthesizer)

下面是使用MATLAB生成正弦波、三角波、方波的代码,直接使用即可。

t=0:2*pi/2^12:2*pi

y=0.5*sin(t)+0.5;

r=ceil(y*(2^8-1)); %将小数转换为整数,ceil是向上取整。

fid = fopen(‘sin.coe’,‘w’); %写到sin.coe文件,用来初始化sin_rom

fprintf(fid,‘MEMORY_INITIALIZATION_RADIX=10;\n’);

fprintf(fid,‘MEMORY_INITIALIZATION_VECTOR=\n’);

for i = 1:1:2^12

fprintf(fid,‘%d’,r(i));

if i==2^12

fprintf(fid,‘;’);

else

fprintf(fid,‘,’);

end

if i%15==0

fprintf(fid,‘\n’);

end

end

fclose(fid);

t=1:1:2^12;

y=(t《=2047);

r=ceil(y*(2^8-1));

fid = fopen(‘square.coe’,‘w’); %写到square.coe,用来初始化rom_square

fprintf(fid,‘MEMORY_INITIALIZATION_RADIX=10;\n’);

fprintf(fid,‘MEMORY_INITIALIZATION_VECTOR=\n’);

for i = 1:1:2^12

fprintf(fid,‘%d’,r(i));

if i==2^12

fprintf(fid,‘;’);

else

fprintf(fid,‘,’);

end

if i%15==0

fprintf(fid,‘\n’);

end

end

fclose(fid);

t=1:1:2^12;

y=[0.5:0.5/1024:1-0.5/1024, 1-0.5/1024:-0.5/1024:0, 0.5/1024:0.5/1024:0.5];

r=ceil(y*(2^8-1));

fid = fopen(‘triangular.coe’,‘w’); %写到triangular.coe,初始化三角波rom

fprintf(fid,‘MEMORY_INITIALIZATION_RADIX=10;\n’);

fprintf(fid,‘MEMORY_INITIALIZATION_VECTOR=\n’);

for i = 1:1:2^12

fprintf(fid,‘%d’,r(i));

if i==2^12

fprintf(fid,‘;’);

else

fprintf(fid,‘,’);

end

if i%15==0

fprintf(fid,‘\n’);

end

end

fclose(fid);

设计DDS的核心就是调用IP ROM,vivado调用ROM的方法和ISE相类似,都是加载.coe文件,我这里特地做笔记,以防忘记。

一文详解Vivado调用ROM IP core设计DDS

这是DDS的原理图,DDS并没有像它的名字一样说的那么玄乎,它的核心便是控制频率的fword字输入,和相位字pword输入,最后调用IP核查找表即可,代码也十分简单,下面给出DDS design代码。

module DDS(

input mclk,

input rst_n,

input [31:0]fword,//frequency control

input [11:0]pword,//phase control

output [9:0]da_data

);

reg [31:0]r_fword;

reg [11:0]r_pword;

reg [31:0]fcnt;

wire [11:0]addr_rom;

//同步寄存器

always @(posedge mclk)

begin

r_fword 《= fword;

r_pword 《= pword;

end

always @(posedge mclk or negedge rst_n)

begin

if(!rst_n)

fcnt 《= 32‘d0;

else

fcnt 《= fcnt + r_fword;

end

assign addr_rom = fcnt[31:20] + r_pword;

//custom sin_rom

sin_rom sin_rom (

.clka(mclk), // input wire clka

.addra(addr_rom), // input wire [11 : 0] addra

.douta(da_data) // output wire [9 : 0] douta

);

endmodule

DDS_design

使用vivado调用IP核ROM教程如下

一文详解Vivado调用ROM IP core设计DDS

点击IP catalog

一文详解Vivado调用ROM IP core设计DDS

选择block memory,然后双击

一文详解Vivado调用ROM IP core设计DDS

将show disabled ports 选项勾选掉

一文详解Vivado调用ROM IP core设计DDS

输入ROM名,我这里为了演示重新配置一个方波ROM,命名为square_rom

一文详解Vivado调用ROM IP core设计DDS

这里选择single ports ROM

一文详解Vivado调用ROM IP core设计DDS

按如上图所示勾选参数,port width是数据宽度,我们根据代码要求设置为10位,port width是数据深度,即有多少个这样的数据,我打开生成的square.coe文件可以清楚的看到一共有4096这样的数据。always enable是ROM一直处于工作状态,不需要使能信号

一文详解Vivado调用ROM IP core设计DDS

这里是加载.coe文件,勾选load init file 然后点击browse将刚才生成的square.coe文件加载到ROM中,最后点击OK。

一文详解Vivado调用ROM IP core设计DDS

选择generate生成IP核

一文详解Vivado调用ROM IP core设计DDS

打开如图所示文件,

一文详解Vivado调用ROM IP core设计DDS

一文详解Vivado调用ROM IP core设计DDS

将生成的IP核实例化,即可

最后编写测试文件进行测试

最后右键点击da_data选择wave style选择analog,将会看到模拟波形,但是有时候还是需要设置一下模拟波形的显示,同样右键点击da_data选择wave style选择analog setting,选择如下图所示参数。

一文详解Vivado调用ROM IP core设计DDS

最后便大功告成,即可得打方波的波形图

一文详解Vivado调用ROM IP core设计DDS

大家还可以按照这种方法将其他两种波形都做出来。

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

    关注

    21

    文章

    614

    浏览量

    151733
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65105
收藏 人收藏

    评论

    相关推荐

    IP core调用DDS

    ISE软件,使用IP core调用DDS,产生正弦载波,使用调频200M时钟做为DDS输入,功能仿真没问题,但后仿真却不显示波形,只是
    发表于 03-20 20:37

    设计DDS IP CORE如何创建不同振幅的sin波?

    大家好,我有个问题。当我设计DDS IP CORE时,我不知道如何创建不同振幅的sin波。通常我可以创建相同的振幅但不同频率的sin波要叠加。但是,我不知道知道如何实现幅度控制.SF
    发表于 05-13 08:58

    使用Vivado调用ROM IP

      本例程主要使用Vivado 调用ROM IP核,用含有正弦曲线的.coe文件初始化ROM,最终通过仿真实现波形的显示  
    发表于 01-08 17:16

    vivadoIP core怎么用

    本实验通过调用PLL IP core来学习PLL的使用、vivadoIP core使用方法。
    发表于 03-02 07:22

    vivado有哪几种常用IP核?如何去调用它们

    vivado三种常用IP核的调用当前使用版本为vivado 2018.3vivadoIP核,
    发表于 07-29 06:07

    Xilinx Vivado的使用详细介绍(3):使用IP

    IP核(IP CoreVivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、
    发表于 02-08 13:08 1347次阅读
    Xilinx <b class='flag-5'>Vivado</b>的使用详细介绍(3):使用<b class='flag-5'>IP</b>核

    了解VivadoIP核的原理与应用

    IP核(IP CoreVivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、
    发表于 11-15 11:19 8513次阅读

    vivado调用IP核详细介绍

    大家好,又到了每日学习的时间了,今天咱们来聊一聊vivado 调用IP核。 首先咱们来了解一下vivadoIP核,
    的头像 发表于 05-28 11:42 3.6w次阅读

    调用Vivado IP核的方法

    在开发PL时一般都会用到分频或倍频,对晶振产生的时钟进行分频或倍频处理,产生系统时钟和复位信号,下面就介绍一下在vivado2017.3中进行PL开发时调用IP的方法。
    发表于 12-22 14:26 4487次阅读

    Vivado 如何调用ROM IP

    .coe格式的数据文件简介 在Vivado中,对rom进行初始化的文件是.coe文件.它的格式如下: memory_initialization_radix=10
    的头像 发表于 11-20 15:01 6270次阅读
    <b class='flag-5'>Vivado</b> 如何<b class='flag-5'>调用</b><b class='flag-5'>ROM</b> <b class='flag-5'>IP</b>核

    解析Vivado如何调用DDSIP进行仿真

    本次使用Vivado调用DDSIP进行仿真,并尝试多种配置方式的区别,设计单通道信号发生器(固定频率)、Verilog查表法实现DDS、A
    的头像 发表于 04-27 16:33 5706次阅读
    解析<b class='flag-5'>Vivado</b>如何<b class='flag-5'>调用</b><b class='flag-5'>DDS</b>的<b class='flag-5'>IP</b>进行仿真

    浅析VivadoIPDDS使用方式及注意事项

    vivado提供了DDS IP核可以输出正余弦波形,配置方法如下
    的头像 发表于 04-27 15:52 9194次阅读
    浅析<b class='flag-5'>Vivado</b>的<b class='flag-5'>IP</b>核<b class='flag-5'>DDS</b>使用方式及注意事项

    关于Vivado三种常用IP核的调用详细解析

    vivadoIP核,IP核(IP Core):Vivado中有很多
    的头像 发表于 04-27 15:45 2.3w次阅读
    关于<b class='flag-5'>Vivado</b>三种常用<b class='flag-5'>IP</b>核的<b class='flag-5'>调用</b>详细解析

    FPGA应用之vivado三种常用IP核的调用

    今天介绍的是vivado的三种常用IP核:时钟倍频(Clocking Wizard),实时仿真(ILA),ROM调用(Block Memory)。
    发表于 02-02 10:14 2654次阅读

    Xilinx Vivado DDS IP使用方法

    DDS(Direct Digital Frequency Synthesizer) 直接数字频率合成器,本文主要介绍如何调用Xilinx的DDS IP核生成某一频率的Sin和Cos信号
    的头像 发表于 07-24 11:23 2143次阅读
    Xilinx <b class='flag-5'>Vivado</b> <b class='flag-5'>DDS</b> <b class='flag-5'>IP</b>使用方法