1.matlab写入文本
因为modelsim没有区分有无符号,所以需要先将十进制有符号数进行量化再转化为二进制数,然后写入文本。(量化位数即输入的位数)代码如下:(请自行调整)
qam16=[12,3,4,5,6,16,0,1,2];%eg
Q=16;%16bit量化
f_s=qam16/max(abs(qam16));%归一化处理
a=round(f_s*(2^(Q-1)-1));%量化
fid = fopen ('datain.txt','w');%文本存放路径
fid2 = fopen ('datain22.txt','w');%文本存放路径
for k=1:length(a)
B_s=dec2bin(a(k)+(a(k)<0)*2^Q,Q);%16bit量化
for j=1:Q
if B_s(j)=='1'
tb=1;
else
tb=0;
end
fprintf(fid2,'%s',B_s(j));
fprintf(fid,'%d',tb);
end
fprintf(fid,'\r\n');
fprintf(fid2,'\r\n');
end
fprintf(fid,';');
fclose(fid);
2.matlab读取文本数据
fid=fopen('E:\FM\simulation\modelsim\Sn.txt','r');%文本存放路径
[s,N]=fscanf(fid,'%lg',inf);
N=N-1;
fclose(fid);
sn=s/max(abs(s))%归一化
3.testbench读取文本
parameter data_num=128000;//设置读取数据长度
integer Pattern;
reg signed [15:0] stimulusQ[1:data_num];
initial
begin
//文件必须放置在"工程目录\simulation\modelsim"路径下
$readmemb("Qm.txt",stimulusQ ); //文本数据写入矩阵
Pattern=0;
repeat(data_num) //读入128000个数据
begin
Pattern=Pattern+1;
qm=stimulusQ[Pattern-1];
end
#clk_priod*2
$stop ; //停止读取数据
end
4.testbench将仿真数据写入文本
integer file_Sn;
initial
begin
//文件放置在"工程目录\simulation\modelsim"路径下
file_Sn = $fopen("Sn.txt");
end
always @(posedge clk)
$fdisplay(file_Sn,"%d",Sn);//将数据Sn写入文本