<1.txt> 内容
111 222 333
444 555 666
<2.txt> 内容
a: 111 222
b: 333 444
program test;
string txt1,txt2;
int fh_1,fh_2;
string line_s;
int val1,val2,val3;
int val_q[$];
initial begin
txt1 = "1.txt";
fh_1 = $fopen(txt1,"r");
txt2 = "2.txt";
fh_2 = $fopen(txt2,"r");
end
##使用$fscanf(file_handle,format,args);
initial begin
while(!$feof(fh_1)) begin
$fscanf(fh_1,"%h",val1); #fscanf(fh_1,"%h %h %h",val1,val2,val3); 这种写法一次取三个数
$display("val1:%0h",val1);
end
end
##result:
val1:111
val1:222
val1:333
val1:444
val1:555
val1:666
val1:666 //注意!!! 这个时候最后一个数据会重复输出一遍
##使用$sscanf(string,format,args);
initial begin
while(!$feof(fh_2)) begin
$fgets(line_s,fh_2); #获得一行内容,保存string格式
if(line_s == "") break; #空行跳过
$sscanf(line_s,"%h: %h %h",val1,val2,val3);
$display("%0h,%0h,%0h",val1,val2,val3);
end
end
##result:
a,111,222
b,333,444
##使用$readmemh(filename,mem_name,start_addr,finish_addr);
initial begin
$readmemh(txt1,val_q); ##或者 int val_q[1:20]; $readmemh(txt1,val_q,10,15);
foreach(val_q[i]) begin
$display("val_q[%0d]:%0h",i,val_q[i]);
end
end
##result:
val_q[0]:111
val_q[1]:222
val_q[2]:333
val_q[3]:444
val_q[4]:555
val_q[5]:666
endprogram
参考:【1】https://blog.csdn.net/weixin_43249032/article/details/88896496
【2】IEEE Standard for SystemVerilog