目录

说明matlab读写txt数据matlab读txtmatlab写txt数据量化数据写入

FPGA读写txt数据FPGA读txtFPGA写txt

FPGA的coe文件

说明

博主一般用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拉高)。

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即可:

memory_initialization_radix=2;

memory_initialization_vector=

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: