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,结果如下图所示。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值