20210326FPGA学习笔记:运用vivado中rom的ip核生成正弦信号

  1. MATLAB中生成rom可以读的.coe文件:
clc;
clear all;
close all;

width = 8;   %位宽
depth = 2 ^ 8 * 2; %深度(采样点个数)
x = linspace(0, 2 * pi, depth);
y = sin(x);
y = round(y * (2 ^ (width - 1) - 1) + 2 ^ (width - 1) - 1);%量化
plot(y);

fid = fopen('dds_sin.coe','w');
fprintf(fid,'memory_initialization_radix=10;\n');
fprintf(fid,'memory_initialization_vector =\n');
fprintf(fid, '%d,\n', y);

fclose(fid);

其中,.coe文件最终格式如下:
memory_initialization_radix=10;
memory_initialization_vector =
127,
129,
130,
132,

127;
(第一行表明数据进制类型,第二部分写数据向量,以,隔开,以;结尾)
数据:位宽8位,深度设置为2 * 2 ^ 8(尽量保证每个量化数据处都有一个点)。

  1. 配置vivado中rom的ip核
    任意打开一个project->
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
例化ip核的格式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

design:

`timescale 1ps / 1ps

module sin_test(
    input         clk,
    input         rst,
    output        sin_data
    );
    
    parameter   WD = 8;//bit width
    parameter   step = 9'd1;
    parameter   depth = 9'd511;
    wire [8:0] sin_data;
    
    reg [WD:0] address;//accumulator as address of rom
    always @(posedge clk or negedge rst)
        begin
            if(!rst) address = 9'd0;
            else if(address < depth) address = address + step;
            else address = 9'd0;
        end
    dist_mem_gen_0 rom1 (
      .a(address),  
      .clk(clk),  
      .spo(sin_data)  
    );
endmodule

simulation:

`timescale 1ps / 1ps
module sin_sim();
    reg clk, rst;
    wire [8:0]sin_data;
    sin_test sin_1(clk, rst, sin_data);
    initial 
        begin
            clk = 1'b0;
            rst = 1'b1;
        end
    always
        #5 clk = ~clk;
    /*always @(rst)
        begin
            #5120 rst = 1'b0;
            #10 rst = 1'b1;
        end*/
endmodule

仿真结果:
在这里插入图片描述
在这里插入图片描述

这里有个问题:刚开始时127数据会保持很多个周期,但是以后的周期中不会出现问题,在考虑是不是ip核内部设有延时的?欢迎评论!

  • 12
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值