MATLAB生成.coe文件并用ROM输出仿真

这篇具有很好参考价值的文章主要介绍了MATLAB生成.coe文件并用ROM输出仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

rom可读.coe文件,我们想要把波形存储到ROM中就要用MATLAB生产.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);

用Matlab运行上面的代码以后会在与这个.m文件相同的目录下产生一个.coe文件,这个.coe文件可以导入到ROM中。

(17条消息) 20210326FPGA学习笔记:运用vivado中rom的ip核生成正弦信号_acmgotoac的博客-CSDN博客

以三个不同频率相位的正弦波为例 

matlab生成滤波器coe文件,matlab,开发语言

 之后设置IP核我们用DBG就可以

matlab生成滤波器coe文件,matlab,开发语言

这里ROM有一个数据位,要比MATLAB中多一位,深度就是采样点个数。

matlab生成滤波器coe文件,matlab,开发语言

 matlab生成滤波器coe文件,matlab,开发语言

 matlab生成滤波器coe文件,matlab,开发语言

选电脑最大线程生成全局IP

之后就是程序设计

`timescale 1ps / 1ps


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

tb

`timescale 1ps / 1ps


module tb_many_sin();
    reg               clk;
    reg               rst;
    wire  [8:0]  sin_data;
    
    always # 5 clk=~clk;
    
    initial begin
        clk=1'b0;
        rst=1'b0;
        #200
        rst=1'b1;
    end
    
    many_sin u_many_sin(
    .clk      (clk),  
    .rst      (rst), 
    .sin_data (sin_data)   
    );
    
endmodule

然后进行仿真测试,选如下 

matlab生成滤波器coe文件,matlab,开发语言

 matlab生成滤波器coe文件,matlab,开发语言

 有比较大的失真,虽然能看出一些来。。猜测是采样不够多,然后ROM深度设置。

之后我们采样率拉高

matlab生成滤波器coe文件,matlab,开发语言

 这里有一段小于0的波形会一直在上面?

过了一天排除了很多原因其实就只是自己设计的波形位宽的问题。。。。3个8位的相加有10位啊,然后ROM里设11位就可以。。

matlab生成滤波器coe文件,matlab,开发语言

 matlab生成滤波器coe文件,matlab,开发语言

 中秋快乐!文章来源地址https://www.toymoban.com/news/detail-555445.html

到了这里,关于MATLAB生成.coe文件并用ROM输出仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包