SV 输出信息到文件的几种方式

1、IC验证过程中文件的读写经常用到,高效简介明了的文件操作方式值得记录:

  1、方式一:$sformatf()

string                 fid        ;
rand bit[31:0]    src_data[] ;
...
fid  = $sformatf("../tests/src/my_init_%02.hex", src_type) ;
`uvm_info("TRACE",$sformatf("DAT_SEL = %s",fid),UVM_LOW);
$readmemh(fid, src_data);
    

  在一个数据计算模块的验证中,需要灌入文件类型的特定数据,为了能够使得test 能够随机吃入不同的源文件,

  在数据包的定义中,增加一个int 类型的控制变量src_type用来选择源数据文件,在pkt的post_randomize(),函数中可以根据随机得到的src_type选择不同的源数据。

  利用$sformatf函数的特性:使得fid为固定命名格式的文件,然后通过$readmemh()读入文件内容到数组中。

  2、方式二:$sformat()

function void collect_rslt(input bit[31:0] addr, input int k, input length)
    string    rslt_name;
    $sformat(rslt_name, "../tests/%s/rslt/rslt_%03d",testname, k+1);
    extract_mem(addr, {rslt_name}, length);
endfunction    

利用$sformat函数的特性:使得rslt_name随着仿真的进行产生的输出写入到不同的固定格式的文件中。

$sformat 和$sformatf本质上是一样的,

  3、方式三:fdisplay()

integer    handle    ;
initial begin
    handle = $fopen("../logs/tc_case01/data.dat");
    $fdisplay(handle, "%08X", mem_32bits[i]);
end

  4、方式三:system()结合shell打印命令echo()

$system($sformatf("echo  '[%04d] : %s ' >> ../tests/%s/info_log",k, MSG[INFO], testname));

双引号中的内容,(不包括双引号)作为sformatf()的返回传给system(),然后执行echo ‘’ 重定向输出至文件。

posted on 2018-08-13 22:19  hematologist  阅读(2510)  评论(0编辑  收藏  举报

导航