在平时对代码进行仿真的过程中经常会需要对数据进行处理,特别是对信号处理方面的内容来说很多数据在FPGA中并不能够直接的观察到需要导出后另外处理观察。所以在仿真中添加对文件的读写有利于解决问题。
1:读文件
reg [4:0] din;
parameter data_length=199; //读取长度
integer i; //数组坐标
reg [4:0] rd_dat [data_length:0];
initial
begin
$readmemh("C:/FPGA/csdn/gongcheng/vivado/pro_18_3_wr_file/wr_file/data0_rd.txt", rd_dat); //将txt文件中的数据存储在数组中 readmemh(按16进制读取) readmemb(按2进制读取)
i = 0;
repeat(data_length) begin
din = rd_dat[i];
i = i + 1;
#20; //读取间隔时间
end
end
读文件需要先定义一个数组,数组宽度是需要读取数据的最大宽度,数组的长度是需要读取数据的长度,通过$readmemh或者是$readmemb来将文件中的数据存储到定义的数组中,他们的区别在于前者是读取16进制文件,后者是读取2进制文件。
2:写文件
wire data_vld0;
reg [15:0] data_gain_cnt=0;
assign data_vld0=w_file_vld;
integer fid_data0;
initial begin
#10;
fid_data0 = $fopen("C:/FPGA/csdn/gongcheng/vivado/pro_18_3_wr_file/wr_file.txt");
#5000000
$fclose(fid_data0);
end
always @(posedge clk)
begin
if((data_vld0 == 1'b1) && data_gain_cnt<3100)
begin
if(data_gain_cnt<100)
data_gain_cnt<=data_gain_cnt+1;
else if(data_gain_cnt<3100)
begin
$fdisplay(fid_data0,"%d %d",$signed(w_file_data_1),$signed(w_file_data_2));
data_gain_cnt<=data_gain_cnt+1;
end
end
end
这里的写文件将信号的有效信号也引进来方便控制,用integer定义文件参数,用$fopen打开指定路径的文件,$fclose是关闭对应文件。$fdisplay是写对应的文件。
在仿真文件中如果想要引用调用的模块中的寄存器,可以通过如下方式引用:文章来源:https://www.toymoban.com/news/detail-755688.html
模块名.需要引用的寄存器变量文章来源地址https://www.toymoban.com/news/detail-755688.html
到了这里,关于vivado读写文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!