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