如何将matlab数据导入modelsim仿真

  1. 目的

    本方法主要适用于在matlab和modelsim联合仿真时有用,比如matlab生成的adc数据作为modelsim 仿真时的adc激励数据,或者modelsim生成的ram数据也可以在仿真时加载进modelsim进行仿真,下面我们将以matlab生成adc原始数据导入modelsim来演示。

  2. matlab代码

    生成adc数据的代码:

clc;
clear all;
close all;

fs = 250e6;     % adc采样率
fout = 10e6;    % 生成信号频率
len = 8192;     % 生成信号长度
t = 0:1/fs:(len-1)/fs;  % 采样点的时间片
amp = 25000;    % adc信号幅度

adc_dat = cos(2*pi*fout*t); % adc数据
adc_dat = awgn(adc_dat, 40);% 对生成信号加入噪声

adc_dat = round(adc_dat*amp);% 量化adc数据

% 画出信号的时域和频域图
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);

% 存储ADC数据
u_adc_dat = sign2com(adc_dat, 16);
fp = fopen('adc_dat.bin', 'w');
fprintf(fp, '%04x\n',u_adc_dat);
fclose all;

adc数据的频域和时域图
adc数据的时域和频域图

  1. 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					;

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

endmodule
  1. 仿真效果

将数据读入modelsim进行仿真

  1. 总结
    此方法非常适用于matlab生成的数据作为激励源。代替掉模块内部需要产生数据源的模块。
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值