一、文件读取
加载二进制文件 |
$readmemb("fname", mem, start_addr, finish_addr) |
|
|
fname 为数据文件名字,mem 为数组型/存储器型变量,start_addr、finish_addr 分别为起始地址和终止地址,start_addr、finish_addr 可以省略,此时加载数据的停止条件为存储器变量 mem 被填充完毕,或文件读取完毕,文件内容只应该有空白符(或换行、空格符)、二进制或十六进制数据 注释用"//"进行标注,数据间建议用换行符区分 |
|
加载十六进制文件 |
$readmemh("fname", mem, start_addr, finish_addr) |
|
module file_tb;
reg [8-1:0] filerom [14-1:0];
initial begin
$readmemh("filetest.txt",filerom);
end
endmodule
Bin_s文件
01
02
03
04
05
06
07
08
09
0A
0B
1A
1B
1C
二、文件写入
系统任务 |
调用格式 |
任务描述 |
文件打开 |
fd = $fopen("fname", mode) ; |
fname 为打开文件的名字,fd 为返回的 32bit 文件描述符--- 正确打开时,fd 为非零值--- 打开出错时,fd为零值 |
mode 用于指定文件打开的方式 |
|
|
文件关闭 |
$fclose(fd) ; |
关闭 fd 描述的对应文件 |
mode |
描述 |
r |
只读打开一个文本文件,只允许读数据。 |
w |
只写打开一个文本文件,只允许写数据。如果文件存在,则原文件内容会被删除。如果文件不存在,则创建新文件。 |
a |
追加打开一个文本文件,并在文件末尾写数据。如果文件如果文件不存在,则创建新文件。 |
rb |
只读打开一个二进制文件,只允许读数据。 |
wb |
只写打开或建立一个二进制文件,只允许写数据。 |
ab |
追加打开一个二进制文件,并在文件末尾写数据。 |
r+ |
读写打开一个文本文件,允许读和写 |
w+ |
读写打开或建立一个文本文件,允许读写。如果文件存在,则原文件内容会被删除。如果文件不存在,则创建新文件。 |
a+ |
读写打开一个文本文件,允许读和写。如果文件不存在,则创建新文件。读取文件会从文件起始地址的开始,写入只能是追加模式。 |
rb+ |
读写打开一个二进制文本文件,功能与 "r+" 类似。 |
wb+ |
读写打开或建立一个二进制文本文件,功能与 "w+" 类似。 |
ab+ |
读写打开一个二进制文本文件,功能与 "a+" 类似。 |
调用格式 |
任务描述 |
$fdisplay(fd, arguments) ; |
按顺序或条件写文件,自动换行 |
$fwrite(fd, arguments) ; |
按顺序或条件写文件,不自动换行 |
输入 |
|
输入 |
|
%h 或 %H |
十六进制格式输出 |
%c 或 %C |
ASCII 码格式输出 |
%d 或 %D |
十进制格式输出 |
%e 或 %E |
指数格式输出 |
%o 或 %O |
八进制格式输出 |
%f 或 %F |
浮点数 (real 型) 格式输出 |
%b 或 %B |
二进制格式输出 |
%t 或 %T |
当前时间格式输出 |
%s 或 %S |
字符串格式输出 |
%m 或 %M |
当前层次访问路径输出 |
\n |
换行符 |
%% |
百分号"%" |
\t |
制表符(Tab 键) |
\0 |
八进制代表的字符 |
\ |
反斜杠""符 |
\0x |
十六进制代表的字符 |
" |
双引号 |
|
|
integer fd;
integer i = 0;
reg [31-1:0] dat = 0;
initial begin
#(10 * CYCLE);
fd = $fopen("wfile.txt","w");
while(i < 10)begin
@(posedge clk)
$fdisplay(fd,"%h",dat);
dat = dat + 2;
i = i + 1;
end
$fclose(fd);
end
三、matlab交互
fid = fopen('FpgaDat.txt','r');
f = fscanf(fid,'%s');
% int
a0 = hex2dec(f(9:16));
% float
a1 = typecast(uint32(hex2dec(f(9:16))),'single');
%double
a2 = hex2num(f(9:16));
fclose(fid);
参考资料:https://www.runoob.com/w3cnote/verilog2-file.html