vivado仿真 文件读取和写入
读取文件
首先创建一个TXT文件。
$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
运行结果如下:
在tcl窗口中会打印出数据。
在仿真的文件夹中会出现刚刚写入数据的文件,文件不需要提前创建,如果程序发现没有用到的文件,会自动创建。
可以看到数据已经成功写入到文件中。文章来源:https://www.toymoban.com/news/detail-513605.html
文章来源地址https://www.toymoban.com/news/detail-513605.html
到了这里,关于vivado仿真 文件读取和写入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!