奇网企业网站管理系统,seo和点击付费的区别,企业网站建设规划 论文,wordpress制作app插件在FPGA开发过程中#xff0c;往往需要将MATLAB生成的数据作为原始激励灌入FPGA进行仿真。为了验证FPGA计算是否正确#xff0c;又需要将FPGA计算结果导入MATLAB绘图与MATLAB计算结果对比。
下面是MATLAB“写.txt”、“读.txt”#xff0c;Verilog“读.txt”、“写.txt”的代…在FPGA开发过程中往往需要将MATLAB生成的数据作为原始激励灌入FPGA进行仿真。为了验证FPGA计算是否正确又需要将FPGA计算结果导入MATLAB绘图与MATLAB计算结果对比。
下面是MATLAB“写.txt”、“读.txt”Verilog“读.txt”、“写.txt”的代码。.txt中的数据是二进制的。
1.MATLAB导出数据生成.txt文件
function Write_data(filename,n,data)%filename:存储地址。n:二进制位宽。data:数据dataround(data);for i1:length(data)if(data(i)0)data(i)data(i)2^n;endendbin_datadec2bin(data,n);fidfopen(filename,wt);for j1:size(bin_data,1)%size(array,1)表示矩阵array的行数。size(array,2)表示列数fprintf(fid,%s\n,bin_data(j,:));%array(i,:)表示提取矩阵array的第i行的所有元素endfclose(fid);
end
2.MATLAB读取.txt文件导入数据
function [data_bin2dec]Read_Data(filename,T)%T表示.txt中的二进制位宽data_bin_txttextread(filename,%s);MAX_DATA2^(T-1);%判断正负的阈值data_bin2deczeros(length(data_bin_txt),1);%一个列向量for i1:length(data_bin_txt)if(convert_bin2dec(data_bin_txt(i),0)MAX_DATA)data_bin2dec(i)convert_bin2dec(data_bin_txt(i),1)-2^T;elsedata_bin2dec(i)convert_bin2dec(data_bin_txt(i),0);endend
end
%%
function [x]convert_bin2dec(bintring,sign)if sign0xbin2dec(bintring);elsexnum2cell(bin2dec(bintring));bin_sizesize(bintring,2);yx;ycellfun((y,bin_size)cal_sign_y(y,bin_size),y,num2cell(ones(size(y,1),1)*bin_size));xy;end
end
%%
function y_ical_sign_y(y_i,bin_size)if y_i2^(bin_size-1)y_iy_i-2^bin_size;end
end
3.FPGA读取.txt文件导入数据
reg [WIDTH-1:0] mem_a[DEPTH:0];
initial $readmemb(C:/xxx/xxx/xxx.txt,mem_a);//将.txt文件读到数组mem_a中task data_stream();//生成数据流用于RTL仿真integer i;for(i0;iDEPTH;ii1)begindin_valid1;dinmem_a[i];#20;din_valid0;dindin;#80;end
endtask Verilog在读.txt文件时只能识别16进制、二进制。不要求每个数据单独占一行但要有空格。
4.FPGA导出数据保存到.txt文件中
integer bt;
initial beginbt$fopen(C:/xxx/xxx/fpga_out.txt,wb);
endalways(posedge clk)beginif(dout_valid)$fdisplay(bt,%b,data_out);
end
$fdisplay(bt,存储形式,想要存的数据)
生成的fpga_out.txt会自动换行 另外.FPGA读.txt并串行输出模仿串行通信总线时