$fscanf
$fscanf按照格式将文件中的数据读到变量中, 格式可以参考$display 中的格式化内容。如果遇到空格或者换行,表示一次读取结束。 读取时,如果发生错误 则返回值为0,正常读取数据时为1, 读取文件结束时为-1。
integer <integer>;
<integer> = $fscanf(<file_desc>, "<format>", <destination_regs>);
integer:定义一个整型数值,正常读取为1,出错时为0,文件读取结束为 -1。
file_desc:为打开的文件句柄
format: 格式化输出,具体可以参照$display 中的格式化参数。表示以什么样的格式读取文件
destination_regs: 读取文件数据后, 保存在这个目标寄存器中。
示例:
integer fd;
integer char_num;
reg [8*10-1:0] fbuf = 0;
initial begin
fd = $fopen(FILE_TXT, "r");
if(fd == 0)
begin
$display("$open file failed") ;
$stop;
end
char_num = $fscanf(fd,"%s",fbuf);
while ($signed(char_num) != -1)
begin
$display("%s", fbuf) ;
#10;
char_num = $fscanf(fd,"%s",fbuf);
end
#10;
$fclose(fd) ;
end
另外的例子,个人觉得很实用
在systemverilog中读取如下文件
file.txt 内容
addr 12345678
data aa55aa55
attri cececece
并把这些键值对存储在一个hash数组h_array[string]中.
在读入后,再遍历一次数组,通过打印检测是否读取成功。
相关代码如下:
program file_read;
integer file;
string variable;
reg [31:0] value;
reg [31:0] h_array [string] ;
initial
begin:file_block
file=$fopen("file.txt","r");
if (file == 0)
disable file_block;
while(!$feof(file))
begin
$fscanf(file,"%s %h\n",variable,value);
h_array[variable] = value;
end
$fclose(file);
//check read result.
foreach (h_array[i])
begin
$display("hash index %0s value %0h",i, h_array[i]);
end
end
endprogram
用vcs编译后,运行,输出如下结果
hash index addr value 12345678
hash index attri value cececece
hash index data value aa55aa55
————————————————
原文链接:verilog从txt中读取_systemverilog读取文本文件-CSDN博客
原文链接:【精选】systemverilog中输入输出系统任务和函数(二)——文件输入输出相关的任务和函数_systemverilog打印函数_hh199203的博客-CSDN博客