4

有没有办法在 VCS/UVM 中获取系统时间?我正在寻找类似于 Perl 的东西localtime(time)。有没有办法为每个uvm_info打印的打印系统时间?

4

3 回答 3

4

一种方法是使用$system()运行任何系统命令,包括系统的日期命令。

initial
 begin
    $system("date");
 end

来自IEEE 1800 LRM:

$system调用 C 函数 system()。C 函数执行传递给它的参数,就好像该参数是从终端执行的一样。$system可以作为任务或函数调用。当作为函数调用时,它返回调用 system() 的返回值,数据类型为 int。如果$system在没有字符串参数的情况下调用,C 函数 system() 将使用 NULL 字符串调用。

另外,请参见此处

于 2014-09-25T20:24:31.440 回答
4

取决于您使用的 VCS 版本。最新版本应支持IEEE Std 1800-2012 § 20.18.1$system中的定义。假设您在基于 UNIX 的环境中运行,您可以执行以下操作:

function string get_localtime();    
  int fd;
  string localtime;
  void'($system("data > localtime")); // temp file
  fd = $fopen("localtime", "r");
  void'($fscanf(fd,"%s",localtime));
  $fclose(fd);
  void'($system("rm localtime")); // delete file
  return localtime;
endfunction

如果您的 VCS 版本不支持$system或者您更符合 C/C++,则使用 DPI(参见IEEE Std 1800-2012 § 35)。在 C 中创建一个函数并在 VCS 中使用您的 SystemVerilog 文件对其进行编译。在 SystemVerilog 中,添加import以允许访问您的 C 函数。假设您的方法名称是 my_localtime 并且返回时间是一个字符串,导入应该如下所示:

import "DPI" function string my_localtime();
于 2014-09-25T20:47:01.727 回答
1

在 c 文件 wallclock.c 中:

#include <time.h>
wallclock() {
   time_t t;
   t = time(NULL);
   return (ctime(&t));
   //return time(NULL);
}

在 SV 文件中:

import "DPI-C" function string wallclock();

module try;

   //int unsigned   t;
   string t;

   initial begin
      t = wallclock();
      $write("time=%0s\n", t);
   end
endmodule
于 2018-01-15T13:13:35.683 回答