在VCS中获取系统时间

时间:2014-09-25 19:23:08

标签: verilog system-verilog uvm synopsys-vcs

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

3 个答案:

答案 0 :(得分:4)

一种方法是使用$system()来运行任何系统命令,包括系统'date命令。

initial
 begin
    $system("date");
 end

来自IEEE 1800 LRM:

  

$system调用C函数系统()。 C功能   执行传递给它的参数,就好像参数已执行一样   从终端。 $system可以被称为任务或者   功能。当作为函数调用时,它返回的返回值   对数据类型为int的system()的调用。如果调用$system而没有   字符串参数,将使用NULL调用C函数system()   字符串。

另请参阅here

答案 1 :(得分:3)

取决于您使用的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中创建一个函数,并使用SystemVerilog文件在VCS中编译它。在SystemVerilog中,添加import以允许访问您的C函数。假设您的方法名称是my_localtime并且返回时间是字符串,则导入应如下所示:

import "DPI" function string my_localtime();

答案 2 :(得分:0)

在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