$fscanf $sscanf $fgets $readmemh 等系统函数使用

<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

猜你喜欢

转载自blog.csdn.net/Holden_Liu/article/details/102824543