大连哪里有手机自适应网站建设维护太原关键词排名优化
在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:数据data=round(data);for i=1:length(data)if(data(i)<0)data(i)=data(i)+2^n;endendbin_data=dec2bin(data,n);fid=fopen(filename,'wt');for j=1: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_txt=textread(filename,'%s');MAX_DATA=2^(T-1);%判断正负的阈值data_bin2dec=zeros(length(data_bin_txt),1);%一个列向量for i=1: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 sign==0x=bin2dec(bintring);elsex=num2cell(bin2dec(bintring));bin_size=size(bintring,2);y=x;y=cellfun(@(y,bin_size)cal_sign_y(y,bin_size),y,num2cell(ones(size(y,1),1)*bin_size));x=y;end
end
%%
function y_i=cal_sign_y(y_i,bin_size)if y_i>=2^(bin_size-1)y_i=y_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(i=0;i<DEPTH;i=i+1)begindin_valid=1;din=mem_a[i];#20;din_valid=0;din=din;#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,并串行输出模仿串行通信总线时: