常用的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寫入文本