您的位置:首页 > 编程语言 > MATLAB

常用的testbench和matlab代码之读取和写入文本代码

2017-09-20 16:15 260 查看
常用的testbench和matlab代码之读取和写入文本代码

1.matlab写入文本

因为modelsim没有区分有无符号,所以需要先将十进制有符号数进行量化再转化为二进制数,然后写入文本。(量化位数即输入的位数)代码如下:(请自行调整)

Q=16;%16bit量化
f_s=qam16/max(abs(qam16));%归一化处理
a=round(f_s*(2^(Q-1)-1));%量化
fid = fopen ('E:\FM\amatlab\datain.txt','w');%文本存放路径
for k=1:length(a)
B_s=dec2bin(a(k)+(a(k)<0)*2^16,16);%16bit量化
for j=1:16
if B_s(j)=='1'
tb=1;
else
tb=0;
end
fprintf(fid,'%d',tb);
end
fprintf(fid,'\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写入文本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: