常用的testbench和matlab代碼之讀取和寫入文本代碼

常用的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寫入文本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章