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博客

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

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

这里ROM有一个数据位,要比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

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

 

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

之后我们采样率拉高

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

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

 

 中秋快乐!

  • 8
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Matlab可以生成COE文件,用于Vivado的IP核或FPGA设计。以下是生成COE文件的步骤: 1. 在Matlab中编写程序,生成需要的数据。 2. 将数据保存到一个文本文件中,格式为十六进制。 3. 打开Vivado,创建一个新的IP核或FPGA设计。 4. 在IP核或FPGA设计中添加一个Block Memory Generator(块内存生成器)。 5. 在Block Memory Generator中选择COE文件格式,并将之前生成COE文件导入。 6. 配置Block Memory Generator的其他参数,如数据位宽、地址位宽等。 7. 生成IP核或FPGA设计的bit文件,将其下载到目标设备中。 以上是生成COE文件的基本步骤,具体操作可以参考Matlab和Vivado的官方文档。 ### 回答2: Matlab和Vivado是两个在不同领域使用的软件,其中Matlab是一种数字计算环境,广泛用于大规模数据分析和科学计算,而Vivado是一种集成电路设计软件,通常用于设计和实现数字电路和FPGA芯片。 当我们使用Matlab生成coe文件时,这意味着我们需要将Matlab输出的数据在后续的设计流程中使用,而最常见的场景是将coe文件用于Vivado设计中的ROM或RAM部分。 coe文件是一种简单的文本文件格式,其中定义了一些初始化数据,通常用于内存初始化和模式生成功能。coe文件格式包含了十六进制和二进制数值以及一些元数据,用于描述初始化数据的类型、长度和存储方式等。 在Matlab生成coe文件的过程通常分为以下几个步骤: 1.首先将Matlab生成的数据转换为合适的格式,如十六进制或二进制 2.将数据按照coe文件格式组织为文本格式 3.将文本格式存储为coe文件并转移至Vivado工程的相关目录 4.在Vivado项目中完成coe文件的使用和ROM或RAM的设计 需要注意的是,在coe文件格式中,文字不区分大小写,文本行的长度必须是偶数,否则将会出错。在使用coe文件初始化ROM或RAM时,请确保指定了正确的coe文件路径和文件名。 综上所述,虽然Matlab和Vivado是在不同领域使用的软件,但它们可以共同协作来完成一些特定的任务,而生成并使用coe文件就是其中的一种常见使用场景。 ### 回答3: Matlab和Vivado是两款常用的工具软件,Matlab用于数据处理和计算方面,而Vivado则是Xilinx FPGA 电路设计工具。当需要将Matlab计算得到的数据集成到Vivado中时,需要将Matlab生成的数据文件转化为Vivado所需要的格式之一,其中就包括了coe文件coe文件是一种用于存储FPGA的初始化数据的文件格式,它是FPGA设备的静态数据文件,用于对FPGA芯片进行初始化。coe文件可以包含数值和字节码两种不同形式的数据,可以由编程语言或是可视化开发工具生成。 接下来,我们将介绍如何使用Matlab和Vivado生成coe文件。 1. Matlab生成coe文件 Matlab内置coe文件输出函数,可将Matlab中的矩阵数据输出coe文件coe文件的格式有两种:一种是十六进制格式,另一种是二进制格式。现在我们以二进制格式为例,介绍如何生成coe文件。 步骤一: 我们可以在Matlab中编写生成coe文件的代码。具体代码如下: %生成coe数据 coe_data = reshape(data, [], 1); %将矩阵转换成列向量 coe_data_bin = dec2bin(coe_data, 16); %将十进制数转化为二进制数,并填充到16位 byte_data = reshape(coe_data_bin', [], 2); %将二进制数转换成列向量,每两个元素组合成一组 coe_file = ['memory.coe']; %coe文件名 fid = fopen(coe_file, 'w'); %打开coe文件 fprintf(fid, 'memory_initialization_radix=2;\n'); %写入coe文件头部信息 fprintf(fid, 'memory_initialization_vector=\n'); %写入coe文件头部信息 for i = 1:size(byte_data, 1) %迭代写入coe数据 fprintf(fid, '%s%s,\n', byte_data{i, 1}, byte_data{i, 2}); end fclose(fid); %关闭coe文件 其中,data为Matlab中的矩阵数据,coe_file为生成coe文件名。 步骤二: 将生成coe文件复制到与Vivado项目目录对应的文件夹中,例如,若项目的coe文件位于Vivado工程目录下的source文件夹内,则需将coe文件复制到source文件夹中。 2. Vivado使用coe文件 Vivado支持直接读取coe文件中的数据,将其作为初始化数据传入到FPGA设备中。下面介绍如何在Vivado项目中使用Matlab生成coe文件。 步骤一: 打开Vivado,创建一个新项目,选择相应的FPGA设备和Vivado版本。接着添加给定的IP核并完成RTL设计。 步骤二: 在Vivado工程导航器中,右键单击设计名并选择“添加源文件”,在弹出的“添加源文件”对话框中选择“从磁盘添加”,并在弹出的对话框中选择刚才生成coe文件。完成后单击“确定”。 步骤三: 在Vivado工具栏中,切换到“IP 汇编器”选项卡,并在IP Assembly视图标签页中创建一个新的初始化数据文件。 步骤四: 单击“添加”按钮,并在下拉菜单中选择coe文件类型。接下来选择刚才添加的coe文件,同时为文件指定一个名称和地址,完成后单击“确定”。 步骤五: 在IP Assembly视图标签页中,右键单击初始化数据文件并选择“生成初始化数据”,可以在弹出的对话框中查看生成结果。这样,刚刚生成coe文件就成功用于了Vivado编程中。 总结: 以上就是使用Matlab生成coe文件并在Vivado中使用的全部步骤。通过此方法,我们可以将在Matlab中计算或处理得到的数据集成到FPGA芯片中,实现更丰富的功能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值