vivado仿真 文件读取和写入

读取文件

首先创建一个TXT文件。

image-20220324093527807

$readmemb和$readmemh用来从文件中读取数据到存储器中。其中readmemb要求每个数字是二进制数,readmemh要求每个数字必须是十六进制数字。数字不能包含位宽说明,数字中可以有不定值x或X,高阻值z或Z,和下划线(_),和Verilog语法中的用法是一样的。

一共有下边6种用法:
(1)$readmemb("<数据文件名>",<存储器名>);
(2)$readmemb("<数据文件名>",<存储器名>,<起始地址>);
(3)$readmemb("<数据文件名>",<存储器名>,<起始地址>,<终止地址>);
(4)$readmemh("<数据文件名>",<存储器名>);
(5)$readmemh("<数据文件名>",<存储器名>,<起始地址>);
(6)$readmemh("<数据文件名>",<存储器名>,<起始地址>,<终止地址>);

写入文件

写入文件的操作与C语言类似,首先打开文件,写入数据之后关闭文件。

outputfile = $fopen("file2.txt","w");打开文件

$fwrite(outputfile,"%b\n",memory);写入数据

$fclose(outputfile);关闭文件

注意:

在写入数据的时候,写入的数据不能是一个数组,必须是单个的数字,因此想写入数组的时候必须要循环单个写入数据,写入数据的数据格式可以是2进制10进制16进制,方式与C语言类似,%控制写入的类型。

仿真

`timescale 1ns / 1ps
module tb_file (
	
);
reg[3:0] memory[0:7];//申请八个四位的存储单元
reg[4:0] n;
integer outputfile;
initial
begin
	$readmemb("E:/file1.txt",memory); //读取file1.txt中的数字到memory
	for(n=0;n<=7;n=n+1)   //把八个存储单元的数字都读取出来,
		$display("%b",memory[n]);


	outputfile = $fopen("file2.txt","w");
	for(n=0;n<=7;n=n+1)   
		$fwrite(outputfile,"%b\n",memory[n]);
	$fclose(outputfile);
	

end

endmodule

运行结果如下:

image-20220324095131196

在tcl窗口中会打印出数据。

在仿真的文件夹中会出现刚刚写入数据的文件,文件不需要提前创建,如果程序发现没有用到的文件,会自动创建。

image-20220324095430598

可以看到数据已经成功写入到文件中。

image-20220324095538995

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐