Matlab变量通过文件导入到Modelsim中供仿真使用

%export to modelsim
function export2sim(var,width,filename)
    x = round(var);
    len = length(x);
    for k = 1:len
        if(x(k)<0)
            x(k)=2^width+x(k);
        end
    end    
    fid = fopen(filename,'w');
    for k = 1:len
        fprintf(fid,'%s\r\n',dec2hex(x(k)));
    end
    fclose(fid);

将以上代码存为export2sim.m文件。var是待导出的变量名,width是modesim中数据的宽度,filename是导出的文件名。

下面运行一个例子演示下用法。

首先用Matlab 产生一个正弦波,在modelsim中这个波形将用位宽为12的数来表示。

那么这个正弦波的应该在-2048 ~ 2047之间,不妨设正弦波的幅度为2000,通过以下代码产生正弦波,该正弦波由1024个点组成。

s = 2000*sin((0:1023)*2*pi/1024);

在Matlab中运行以下代码产生s.dat文

export2sim(s,12,'s.dat');

编写Verilog文件test.v,代码如下

`timescale 1ns/1ps
module test();
    reg [11:0]ram[0:1023];
    reg clk;
    reg [9:0]cnt;
    reg [11:0]s;
    
    initial begin
        clk <= 1'b0;
        cnt <= 1'b0;
        $readmemh("s.dat",ram);
    end
    
    always #5 clk <= ~clk;
    
    always @(posedge clk)begin
        cnt <= cnt + 1'b1;
        s <= ram[cnt];
    end
endmodule 

仿真13us,结果如下图所示。

你可能感兴趣的:(Modelsim,matlab,verilog,modulsim)