目的
如何将modelsim仿真的数据存储成文件供matlab分析,在实际工程应用中很多时候我们需要分析仿真过程中新产生的数据,在用肉眼不能直接观察时就需要将数据存成文件使用第三方软件进行更直观的分析。下面分别使用matlab和modelsim联合仿真,将modelsim的仿真数据存成文件使用matlab对数据进行分析。
verilog代码
`timescale 1ns/1ps
module testbench();
localparam LEN = 8192 ;
reg [15:0] adc_dat[8191:0] ;
reg clk ;
reg rst ;
reg [12:0] cnt ;
reg [15:0] sim_dat ;
reg [15:0] wr_cnt ;
initial begin
$readmemh("./adc_dat.bin", adc_dat, 0, LEN-1);
end
initial begin
clk = 0;
rst = 1;
cnt = 0;
sim_dat = 0;
#1000;
rst = 0;
end
always #2.00 clk = ~clk ;
always@(posedge clk)
begin
if(rst) begin
cnt <= 0;
end
else begin
cnt <= cnt + 1;
sim_dat <= adc_dat[cnt];
end
end
integer fp;
initial begin
fp =$fopen("adc_export_dat.bin", "w");
end
always@(posedge clk)
begin
if(rst) begin
wr_cnt <=0;
end
else begin
if(wr_cnt < 8192) begin
wr_cnt <=wr_cnt + 1;
end
if(wr_cnt < 8192) begin
$fwrite(fp, "%d\n", $signed(adc_dat[wr_cnt]));
end
end
end
endmodule
从代码中可以看出我们是将文件读进来的数据直接存成文件(文件的读取过程见上一篇文章如何将matlab生成数据导入modelsim进行仿真)
matlab分析数据代码
clc;
clear all;
close all;
adc_dat = load('adc_export_dat.bin');
len = length(adc_dat);
subplot(211);
plot(adc_dat);
subplot(212);
fft_data = abs(fft(adc_dat, len));
fft_data = 20*log10(fft_data);
fft_data = fft_data - max(fft_data);
plot(fft_data);