verilog testbench matlab 读取和写入文本代码

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写入文本
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页