说明
博主一般用matlab和VIVADO进行开发,常常碰到二者需要读写数据的问题,因此对matlab和FPGA读写数据做一个总结,主要是为了方便自己查阅,减少不必要的时间浪费,同时和大家做一个分享。
matlab读写txt数据
matlab读txt
fid=fopen('data.txt','r');
data=fscanf(fid,'%d',[1 Inf]);
fclose(fid);
先创建一个句柄fid,然后再使用fscanf函数读取txt的数据。注意txt文件需在matlab当前文件夹下,否则需写文件路径。%d代表格式为有符号整数。
matlab写txt
数据量化
首先是数据量化,因为本文着眼于matlab和FPGA的联合使用,FPGA能读取的txt数据一般是二进制的,需要先完成数据量化。
data_txt=zeros(1,length);
data_txt=string(data_txt);
for ii=1:length
if(data(ii)>=0)
real_txt(ii)=dec2bin(ceil(data(ii)*2^a),data_width);
else
real_txt(ii)=dec2bin(2^data_width-ceil(-data(ii)*2^a),data_width);
end
end
要先创建一个数组data_txt,并将其转换为string格式。然后完成数据量化,data_width是量化宽度,a是缩放的位数,a取决于需要量化的定点数的数据格式(小数位的个数),然后用dec2bin转化为二进制数。
如0.707量化为8位定点数,1位符号位,1位整数位,6位小数位,则量化结果为:
-0.707,量化结果为:
数据写入
然后写入的方式与读数据类似:
fid=fopen('data.txt','w');
fprintf(fid,'%s\r\n',data_txt);
fclose(fid);
先创建一个句柄fid,然后再使用fprintf函数读取txt的数据。%s表示输出字符串,\r是回车符,\n是换行符。
FPGA读写txt数据
FPGA读txt
这在testbench撰写时非常实用,testbench文件除了需要写时钟信号和复位信号之外,常需要读取文件作为输入数据的模拟,比较常见的方法是读取txt文件。
integer i;
reg [width-1:0] data;
reg [width-1:0] data_reg [1:length];
initial
begin
#200
$readmemb("data.txt", data_reg );
i = 0;
repeat(length) begin
i = i + 1;
data = data_reg [i];
#clk_period;
end
end
使用“$ readmemb”将txt的数据读取到data_reg中,data_reg的数据宽度是width,深度是length,然后在每个时钟周期,读取data_reg的数据到data中。
“$ readmemb”若不写文件路径,则txt文件需与testbench在一个文件夹下,写文件路径的话需把文件路径的“\”改为“/”。
代码里的#200可以根据开发需要自行修改,代表延迟200个ns,这边和复位信号的拉高保持同步(testbench中复位信号低电平有效,在200ns拉高)。文章来源:https://www.toymoban.com/news/detail-492396.html
FPGA写txt
integer file;
initial
begin
file = $fopen("data.txt");
end
wire clk;
assign clk=sys_clk&sys_rst_n;
always @ (posedge clk)
$fdisplay(file, "%d", data);
FPGA的coe文件
在FPGA开发中,RAM或ROM的初始化文件、FIR滤波器的系数等需要读取coe文件,coe文件生成也很方便,一般是matlab输出二进制txt文件,然后在txt文件的开始处加入这两句代码,再把文件后缀名从txt改成coe即可:文章来源地址https://www.toymoban.com/news/detail-492396.html
memory_initialization_radix=2;
memory_initialization_vector=
到了这里,关于FPGA和matlab读写txt文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!